我想在belongsToMany关系中的每个附加/保存上的数据透视表上添加一个属性。
示例:
// 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
函数,但它看起来不是一个好的解决方案,它看起来像一个黑客。因为这样做,我必须创建一个扩展原始版本的新BelongsToMany
类,在attach
中调用原始Model
方法,然后覆盖返回的对象,然后我的代码变成意大利面,所以我扔了一切。
有没有优雅的方法来做到这一点?
旁注:rand
属性是一个愚蠢的例子,它只是一个例子,不关心它。
答案 0 :(得分:2)
在saveRole
模型中创建User
方法
public function saveRole($role)
{
$this->roles()->save($role, ['rand' => rand()]);
return $this;
}
然后打电话
User::find(1)->saveRole($role);
我认为它比重载BelongsToMany
类