在laravel文档中,以下是has-many-through关系的示例:Country通过用户发布了很多帖子。
但在我的情况下,我需要这样的事情: 用户通过客户担任多种角色。
我希望从用户到角色有很多关系。
有没有办法让它以这种方式运作?
我用收集方法解决了我的问题:
public function roles() {
$roles = $this->hasMany('SC\Customer')->get()->each(function($item) {
return $item->role();
});
return $roles;
}
答案 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');