Laravel - HasManyThrough以不同的方式

时间:2015-11-21 12:54:38

标签: orm eloquent laravel-5.1 relation

在laravel文档中,以下是has-many-through关系的示例:Country通过用户发布了很多帖子。

enter image description here

但在我的情况下,我需要这样的事情: 用户通过客户担任多种角色。

enter image description here

我希望从用户到角色有很多关系。

有没有办法让它以这种方式运作?

修改

我用收集方法解决了我的问题:

public function roles() {
    $roles = $this->hasMany('SC\Customer')->get()->each(function($item) {
        return $item->role();
    });
    return $roles;
}

1 个答案:

答案 0 :(得分:0)

这一切都取决于你想要完成的事情。

在大多数需要定义角色的情况下,创建一个连接表的单独数据透视表将是一种很好的方法。

幸运的是,Laravel的文档非常清楚,您可能会在本节中找到答案:http://laravel.com/docs/5.1/eloquent-relationships#many-to-many

继续阅读该部分并一直向下阅读,Taylor深入探讨了主题以及针对不同场景的各种解决方案..

假设您有许多用户和许多角色(管理员,用户,主持人)等。这些用户中的许多人可以拥有不同的角色和其他属性,例如他们是否是客户。首先要创建用户,角色表(或其他任何需要的东西)。

然后,您可以创建一个加入数据透视表,让我们说一下role_user。在其中,您可以指定 外键 ,例如 user_id ,它代表用户表中的 id role_id 代表角色表中的 id

通过指定外键,您可以将用户附加到角色,然后附加到另一列中您想要的任何属性。因此,如果您在数据透视表中有另一列是" customer",它可以是1/0 (客户/不是客户)或者您可能想要添加另一个外键可以 customer_id 表示客户表中的 id 列。

这一切都取决于你想要完成什么,但很容易陷入困境。在实际编码以获得抽象概述之前,使用UML软件对其进行建模,可能是一个好主意。我建议StarUML

然后在您的用户模型中,您可以通过指定关系来绑定它们,如下所示:

return $this->belongsToMany('App\Role')->withPivot('column1', 'column2');