1452无法添加或更新子行:外键约束失败

时间:2017-06-26 13:06:11

标签: php mysql laravel

创建新产品时出现此错误。这是功能:

public function createProduct(Request $request) {
    $product = Product::create($request->all());
    $product->title = strip_tags($request->title);
    $product->description = strip_tags($request->description);
    $product->price = strip_tags($request->price);

    $product->category_id = 1;
    $product->save();
    return redirect('/');
}

'插入productstitledescriptionpriceimageupdated_atcreated_at)值( ?,?,?,?,?,?)

但为什么我在这些值之间看不到category_id?我还在Product.php中填写了category_id

protected $fillable = [
    'slug', 'title', 'description', 'stock', 'price', 'image',
    'category_id'
];

我还在category表中创建了categories,ID为1

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您的问题是在设置category_id之前创建并保存模型。您的请求数据不得包含类别ID。

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

这将尝试使用您传递给它的数据将行(创建+保存模型)插入数据库。

所以当你点击时:

$product->title = strip_tags($request->title);

您的插入查询已发送。为了便于阅读,不要混淆创建或制作setter。要么:

$product = Product::create([
   'category_id' => 1,
   ...
]);

或者做:

$product = new Product();
$product->category_id = 1;
...
$product->save();