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

时间:2017-03-30 10:36:10

标签: php sql laravel laravel-5 laravel-5.3

我有一个问题,我一直在开发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()

相反,它有效,没有错误。

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

2 个答案:

答案 0 :(得分:9)

由于您未使用mass assignment功能,因此请在此处使用$product->save();

如果您想使用质量分配,请执行以下操作:

public function store(Request $request)
{
    Product::create($request->all());
}

答案 1 :(得分:1)

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

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

$product->save($parameters)实际上使用了质量赋值功能,这些属性需要在laravel属性中可填写或不受保护。

请注意,Model::create()也支持群发作业。