无法将user_id和product_id插入购物车。 Laravel 5

时间:2016-06-02 08:00:53

标签: php mysql laravel laravel-5 eloquent

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

2 个答案:

答案 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();