2016-06-02 7 views
1

私はcartsにUSER_IDを追加したい場合は、私はこのエラーカートにuser_idとproduct_idを挿入できません。 Laravel 5

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`)) 

移行がこのエラーなしでうまくいった取得します。私は、これは私のUser.php機能であるLaravel 5を使用しています:

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(); 
} 

内の関数である私は、私の中に塗りつぶし可能なフィールドを設定しました

protected $fillable = [ 
    'user_id', 'product_id', 'quantity' 
]; 

また、私はエラーログに次の行を取得する:

at Connection->runQueryCallback('insert into `carts` (`updated_at`, `created_at`) values (?, ?)' 

それものuser_idを挿入しようとしていないようだと

答えて

2

まず、あなたはあなたのユーザーモデルに誤っカート()関係を定義しました。

public function carts() 
{ 
    return $this->hasMany('App\Cart'); 
} 

は、第二に、あなたが$ cart-を呼び出す必要があります:あなたは代わりbelongsToののhasManyの()()を呼び出す必要がありますのでユーザー一対多関係の所有側であります>の代わりに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(); 
} 
+0

は説明をありがとう!できます –

0

あなたはカートを救う意味するかをPRODUCT_ID?

$cart->save(); 
関連する問題