无法将user_id和product_id插入购物车。拉拉维尔 5



当我想将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();

最新更新