Laravel 保存($request->all()) 错误
Laravel save($request->all()) Error
我有一个问题,我一直在开发 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()
相反,它有效,没有错误。
任何人都可以帮我找到这个问题的根源吗?
由于您没有使用 mass assignment 功能,因此您应该在此处使用 $product->save();
。
如果您想使用批量分配,只需这样做:
public function store(Request $request)
{
Product::create($request->all());
}
正如 Alexey 所说,$product->save()
它将使用函数中发送的数据,而不是您之前设置的任何数据,就像您在示例中尝试做的那样。
这样你就不使用批量分配功能,因为你指定了数据库中需要更新的每个字段。
$product->save($parameters)
实际上利用了批量分配功能,这些属性需要在 laravel 属性中填写或取消保护。
请注意,Model::create()
也支持批量分配。
我有一个问题,我一直在开发 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()
相反,它有效,没有错误。
任何人都可以帮我找到这个问题的根源吗?
由于您没有使用 mass assignment 功能,因此您应该在此处使用 $product->save();
。
如果您想使用批量分配,只需这样做:
public function store(Request $request)
{
Product::create($request->all());
}
正如 Alexey 所说,$product->save()
它将使用函数中发送的数据,而不是您之前设置的任何数据,就像您在示例中尝试做的那样。
这样你就不使用批量分配功能,因为你指定了数据库中需要更新的每个字段。
$product->save($parameters)
实际上利用了批量分配功能,这些属性需要在 laravel 属性中填写或取消保护。
请注意,Model::create()
也支持批量分配。