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
属性は愚かな例です。それは単なるイラストです。気にしないでください。
の過負荷をはるかに簡単かつきれいだと思う
を呼び出して、あなたの
User
モデルでsaveRole
メソッドを作成しますこの関係のために?あなたのモデルでそれを見ることができますか? – TheFallenはいピボットテーブルを使用しています。私はあなたの質問を編集しました、ありがとう:) –
Eloqeuntイベントを聞いてみました**モデル上に**作成し、そこに属性を追加しましたかhttps://laravel.com/docs/5.2/eloquent#events? – TheFallen