【发布时间】:2016-06-01 21:02:40
【问题描述】:
我想在 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()
我想在 Model 中重载 belongsToMany 函数,但它看起来不是一个好的解决方案,它看起来像一个 hack。因为这样做,我必须创建一个新的BelongsToMany类扩展原来的类,在Model中调用原来的attach方法,然后重写返回的对象,然后我的代码就变成了意大利面条,所以我把所有的东西都扔了。
有什么优雅的方法可以做到这一点吗?
旁注:rand 属性是一个愚蠢的例子,它只是一个插图,不要在意。
【问题讨论】:
-
您是否为这种关系使用了数据透视表?我们可以在您的模型中看到它吗?
-
是的,我正在使用数据透视表。我已经编辑了我的问题,谢谢:)
-
您是否尝试过在模型上监听 Eloqeunt 事件 creating 并在其中添加属性 laravel.com/docs/5.2/eloquent#events?
-
我要更新枢轴,而不是模型(除非我弄错了,枢轴没有模型)。
-
这个包可以帮助你github.com/fico7489/laravel-pivot(或者你可以从中得到想法)
标签: php laravel laravel-5 eloquent