当我想将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.这是我的User.php函数:
public function cart()
{
return $this->belongsTo('App\Cart');
}
这是Cart.php功能:
public function user()
{
return $this->belongsTo('App\User');
}
这是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
答案 0 :(得分:2)
首先,您在用户模型中错误地定义了 cart()关系。 用户是一对多关系的拥有方,因此您应该调用 hasMany()而不是 belongsTo()强>:
public function carts()
{
return $this->hasMany('App\Cart');
}
其次,您需要调用 $ 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();
}
答案 1 :(得分:0)
你的意思是保存购物车吗?
$cart->save();