2016-06-01 14 views
1

belongsToMany関係のすべてのアタッチ/セーブ時に、ピボットテーブルにアトリビュートを追加したいとします。belongsToMany関係からのattachメソッドのオーバーライド

例:

// I don't want to do add the `rand` attribute everytime... 
User::find(1)->roles()->save($role, ['rand' => rand()]); 
User::find(7)->roles()->save($role, ['rand' => rand()]); 
User::find(42)->roles()->save($role, ['rand' => rand()]); 

// ... I just want to call save... 
User::find(1)->roles()->save($role); 
// ... and magically, `rand` attribute is set to rand() 

私がモデルにbelongsToMany機能をオーバーロードしたかったが、それはそれはハックのように見える、良い解決策になるようにしていません。これを行うため、元のattachメソッドをModelに呼び出し、返されたオブジェクトをオーバーライドしてから、コードがスパゲッティになり、すべてを投げたので、新しいBelongsToManyクラスを作成する必要があります。

これを行ううれしい方法はありますか?

サイドノート:rand属性は愚かな例です。それは単なるイラストです。気にしないでください。

+0

の過負荷をはるかに簡単かつきれいだと思う

User::find(1)->saveRole($role); 

を呼び出して、あなたのUserモデルでsaveRoleメソッドを作成しますこの関係のために?あなたのモデルでそれを見ることができますか? – TheFallen

+0

はいピボットテーブルを使用しています。私はあなたの質問を編集しました、ありがとう:) –

+0

Eloqeuntイベントを聞いてみました**モデル上に**作成し、そこに属性を追加しましたかhttps://laravel.com/docs/5.2/eloquent#events? – TheFallen

答えて

1

public function saveRole($role) 
{ 
    $this->roles()->save($role, ['rand' => rand()]); 
    return $this; 
} 

その後、私はそれは、あなたは、ピボットテーブルを使用していBelongsToManyクラス

関連する問題