Laravel 保存($request->all()) 错误

Posted

技术标签:

【中文标题】Laravel 保存($request->all()) 错误【英文标题】:Laravel save($request->all()) Error 【发布时间】:2017-08-24 05:32:44 【问题描述】:

我有个问题,我一直在开发laravel应用,遇到了这个奇怪的错误:

QueryException in Connection.php line 770:
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`testenv`.`products`, CONSTRAINT `products_tenant_id_foreign` FOREIGN KEY (`tenant_id`) REFERENCES `tenants` (`id`)) (SQL: insert into `products` () values ())

这是我的商店功能

public function store(Request $request)

    $product = new Product;

    /*
    $product->name = $request->name;
    $product->stockQty = $request->stockQty;
    $product->minimumQty = $request->minimumQty;
    $product->description = $request->description;
    $product->notes = $request->notes;
    $product->tenantMargin = $request->tenantMargin;
    $product->length = $request->length;
    $product->height = $request->height;
    $product->weight = $request->weight;
    $product->showLength = $request->showLength;
    $product->showHeight = $request->showHeight;
    $product->showWeight = $request->showWeight;
    $product->size = $request->size;
    $product->colorName = $request->colorName;
    $product->colorHex = $request->colorHex;
    $product->isActive =$request->isActive;
    $product->tenant_id = $request->tenant_id;
    $product->productviewid = $request->productviewid;
    */

    $product->save($request->all());

    return "product successfully created";

只有在我使用时才会出现错误

$product->save($request->all());

但如果我取消注释已注释的代码并使用

$product->save()

相反,它可以工作,没有错误。

谁能帮我找出这个问题的根源?

【问题讨论】:

只使用 $product->save() 您将所有内容保存两次。一次接一次,第二次一次接一次(第二次更好)。但是使用第二种方法,您需要向模型添加可填充字段 【参考方案1】:

由于您没有使用mass assignment 功能,因此您应该在此处使用$product->save();

如果你想使用批量分配,只需这样做:

public function store(Request $request)

    Product::create($request->all());

【讨论】:

是的,就是这样,批量分配功能,现在可以使用了,非常感谢! 我该怎么做? $request->product->all();如果我以对象格式接收数据,【参考方案2】:

正如 Alexey 所说,$product->save()它将使用函数中发送的数据,而不是您之前设置的任何数据,就像您在示例中尝试做的那样。

那样您使用批量分配功能,因为您指定了需要在数据库中更新的每个字段。

$product->save($parameters) 实际上利用了质量分配功能,并且这些属性需要在 laravel 属性中填充或不受保护。

请注意,Model::create() 也支持批量分配。

【讨论】:

以上是关于Laravel 保存($request->all()) 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 8 中保存多项选择?

不将引导日期值保存到 Laravel 中的数据库表

Laravel 类型提示,模型保存时 id 返回 null

Laravel如何保存for循环中的数据

Laravel Eloquent $model->save() 不保存但没有错误

如何返回并显示保存到数据库laravel的json数据