2016-12-19 14 views
0

どのようにピボットテーブルとして明示的なテーブルを選択できますか?Laravel Eloquent多対多関係:明示的なピボットテーブルを使用

私のモデルは、多対多の関係は、一般的にlaravelでどのように機能するかを

User 
-id 

Role 
-id 

user_role 
-user_id 
-role_id 
-other_foreign_key_id 
-other_attributes 
-... 

は私が知っています。しかし、ドキュメントでは、追加の外部キー制約または追加の列のデータ型を定義できない自動生成された結合テーブルのみを使用します。

私が望むのは、user_roleテーブルのための独自のマイグレーションとモデルがあり、それをピボットとして使用することですが、定義されたテーブルをピボットとしてm対nの関係に明示的にリンクする方法はわかりません。

ありがとうございます。

答えて

1

結合テーブルの名前をカスタマイズするだけでなく、belongsToManyメソッドに追加の引数を渡すことで、テーブルのキーの列名をカスタマイズすることもできます。第四の引数が、このような、foreign key name of the model that you are joining toである3番目の引数が、foreign key name of the model on which you are defining the relationshipである:デフォルト

return $this->belongsToMany('App\Role', 'role_user', 'user_id', 'role_id') 
      ->withPivot(['other_foreign_key_id', 'other_attributes']); 

、唯一のモデルキーがピボットオブジェクト上に存在することになります。カスタム -

$user = User::find($id); 
foreach ($user->roles as $role) { 
    echo $role->pivot->created_at; 
    echo $role->pivot->other_attribute; 
} 

UPDATE:このようpivotを使用して

あなたのpivot attributes使用することができます:あなたのピボットテーブルは、余分な属性が含まれている場合withPivot()法との関係を定義する際に、上記行われるよう、あなたはそれらを指定する必要があります。 Eloquentのピボットモデル

また、次のように独自のカスタムピボットモデルを定義することもできます。

class RoleUserPivot extends Pivot { 
    // let's use date mutator for a field 
    protected $dates = ['completed_at']; 
} 

さて、雄弁グラブにこのピボットモデルをさせるために、我々はまた、UserRole両方にnewPivotメソッドをオーバーライドする必要があります。

// User model 
public function newPivot(Model $parent, array $attributes, $table, $exists) 
{ 
    if ($parent instanceof Role) { 
     return new RoleUserPivot($parent, $attributes, $table, $exists); 
    } 

    return parent::newPivot($parent, $attributes, $table, $exists); 
} 


// Role model 
public function newPivot(Model $parent, array $attributes, $table, $exists) 
{ 
    if ($parent instanceof User) { 
     return new RoleUserPivot($parent, $attributes, $table, $exists); 
    } 

    return parent::newPivot($parent, $attributes, $table, $exists); 
} 

Custom Pivot Tables

希望についての詳細を参照してください。これは役に立ちます!

+0

あなたの答えをありがとうが、私は、例えば、結合テーブルのデータ型を指定することができないか、外部キー制約を設定することができないため、生成されたリンクテーブルは必要ありません。 –

+0

また、 'role_user'テーブルのモデルを作成することもできます。結合テーブルのモデルを作成して要件を満たすことができます。 –

+0

とモデルにどのように添付すればよいですか? –

関連する問題