Laravel:如何创建自定义枢轴模型?

时间:2014-01-18 11:36:37

标签: php laravel laravel-4

我正在开发一个在UserClub之间存在多对多关系的项目。这种关系有效,我可以使用$user->clubs获取相应的对象。数据透视表我命名为memberships。我可以使用$club->pivot获取数据透视数据。在迁移中为memberships表定义了外键。

但是,我希望透视表由模型表示,以便我可以轻松更新Membership的属性,例如角色(甚至可以将Role模型添加到{{1} }!)或Membership

我在文档中查看了“Defining A Custom Pivot Model”,但它说的内容对我不起作用,我得到了:

status

我还看了this description如何做到这一点,但它或多或少与上面相同。

ErrorException Argument 1 passed to Illuminate\Database\Eloquent\Model::__construct() must be of the type array, object given 型号:

Membership

以前有人这样做过吗?

2 个答案:

答案 0 :(得分:2)

这已由suggestion by a reddit user解决,以扩展我的会员模型中的Pivot。我还必须在用户和俱乐部模型的关系声明中添加->withPivot('status', 'role')->withTimestamps()

答案 1 :(得分:0)

您可以通过添加一些手动代码来完成此操作。

您的会员资格模型看起来不错。如果您定义方法$ user-> clubs(),您可以轻松获得$ user的所有俱乐部,您可以手动获得所有俱乐部。

clubs() {
    $memberships=$this->memberships;
    $clubs=new \Illuminate\Database\Eloquent\Collection();
    foreach($memberships as $m) {
        $clubs=$clubs->merge($m->clubs);
    }
    return $clubs;
}