当我想将user_id添加到carts
时,我收到此错误
Cannot add or update a child row: a foreign key constraint fails (`armytag`.`carts`, CONSTRAINT `carts_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`))
迁移顺利进行,没有此错误。我正在使用Laravel 5。这是我的用户.php函数:
public function cart()
{
return $this->belongsTo('AppCart');
}
这是购物车.php函数:
public function user()
{
return $this->belongsTo('AppUser');
}
这是CartController
中的函数
public function add(Request $request, $id)
{
$cart = new Cart();
$product = Product::where('id', $id)->first();
$user_id = Auth::user()->id;
$cart->user_id = $user_id;
$cart->product_id = $product->id;
$cart->quantity = $request->quantity;
$cart->create();
return redirect()->back();
}
我还在Cart.php
中设置了可填写字段
protected $fillable = [
'user_id', 'product_id', 'quantity'
];
我也在错误日志中得到这一行:
at Connection->runQueryCallback('insert into `carts` (`updated_at`, `created_at`) values (?, ?)'
似乎它甚至没有尝试插入user_id和product_id
首先,您在用户模型中错误地定义了 cart() 关系。User 是一对多关系的拥有方,因此您应该调用 hasMany() 而不是 belongsTo():
public function carts()
{
return $this->hasMany('AppCart');
}
其次,你需要调用 $cart->save() 而不是 $cart->create()。save() 将保存现有对象,而 create() 将使用作为参数传递的值创建一个新对象并保存它。由于没有参数传递给 create(),因此在查询中不会设置时间戳以外的值。
您还可以简化代码,只需执行以下操作:
public function add(Request $request, $id)
{
Cart::create([
'user_id' => Auth::id(),
'product_id' => $id,
'quantity' => $request->quantity
]);
return redirect()->back();
}
你的意思是保存购物车吗?
$cart->save();