2016-09-22 14 views
1

私のアプリケーションのEloquent関係を設定する方法を理解するための助けが必要です。Laravel Eloquentと3テーブルの関係

私は3つのテーブルの移行を作成しました。

| users  | | items  | | user_items | 
+-----------+ +-----------+ +------------+ 
| id  | | id  | | id   | 
| username | | name  | | user_id | 
           | item_id | 
           | qty  | 

Iはなく数量列と、1つのアイテムIDに1つのユーザIDを制限する、セットアップuser_itemsテーブルに一意のインデックスを持っています。私はEloquentをセットアップして、UserとItemという2つのモデルを用意したいと思います。私が言うことができるところ:

私は3番目のモデル、UserItemが必要かどうかを調べようとしています。

答えて

1

実際にはM:Mの関係ですが、Laravel Eloquentはすでにそのサポートを受けていますut of the box.あなたが持っているuser_itemテーブルをピボットテーブルといいます。

Eloquentを使用して関係を設定する方法は次のとおりです。これが機能する

// User class 
class User extends Eloquent { 

public items() { 
    return $this->belongsToMany(Item::class)->withPivot('qty'); 
} 

} 

class Item extends Eloquent { 
    public function users() { 
     return $this->belongsToMany(User::class)->withPivot('qty'); 
    } 
} 

、次の3つの移行が必要になります。item_userテーブルの

  • ユーザー表の1
  • アイテムテーブルに1つの
  • ものを。 Eloquentでは、ピボットテーブルはアルファベット順に2つのテーブル名で構成されています。ダッシュで区切られています。
  • Ellquent conventionの後に、_idを使用するようにFKを設定した場合、Eloquentは追加情報を必要としません。したがって、あなたの場合、item_userテーブルのFKはそれぞれuser_idとitem_idでなければなりません。
  • ItemUserモデルの必要はありません。あなたは行って、関係でピボットにアクセスすることができます。
$user = User::find(1); 
$user->items[0]->pivot->qty; // retrieve the quantity 
+0

は、そのピボット構文は私が探していただけのものです、あなたにExrakunをありがとうございます。 –

関連する問題