Laravel 4 是否使用belongToMany()连接其他表?
这个问题最好用一个例子来说明:Laravel 4 是否使用belongToMany()连接其他表?,laravel-4,many-to-many,Laravel 4,Many To Many,这个问题最好用一个例子来说明: users id name roles id name role_user user_id role_id rank_id group_id ... ranks id name groups id name 通过在我的User.php模型中指定以下关系,我可以轻松地加载用户表: public function roles() { return $t
users
id
name
roles
id
name
role_user
user_id
role_id
rank_id
group_id
...
ranks
id
name
groups
id
name
通过在我的User.php
模型中指定以下关系,我可以轻松地加载用户表:
public function roles() {
return $this->belongsToMany('Role');
}
调用User::with('roles')时,将输出下表:
但是,我不知道如何将其扩展到包括:
User | Role | Rank | Group
-----------------------------
Jon | Admin | Boss | Blue
Jan | Mod | Minion | Red
我试着用('roles'、'ranks'、'groups')
来做User::但这肯定是错误的,因为我告诉Laravel也有rank\u User
和group\u User
中间表,但没有。正确的方法是什么
PS:我知道最好将列组和组分离到它们自己的关系/透视表中,这只是一个示例
编辑:我能找到的最接近于此的示例:您可以将模型的关系方法视为普通查询,并基于它们进行构建:
public function roles() {
return $this->belongsToMany('Role')
->join('role_user', 'role_user.role_id', '=', 'roles.id')
->join('ranks', 'ranks.id', '=', 'role_user.rank_id')
->join('groups', 'groups.id', '=', 'role_user.group_id');
}
当关系查询变得太复杂时,上面这样的查询就不那么直观了,因此最好重新考虑数据库设计,但理论上可以对它们进行操作。谢谢@tbuteler,我尝试过类似的方法,但我似乎无法选择排名/组
名称。我已经在我的连接上方添加了一行->select('ranks.name')
,但是我的排名名称仍然没有显示出来。你能更新你的答案来适应这个吗?我真的很惊讶拉威尔没有一个简单的方法来做到这一点。我期待类似于->belongsomy('role\u user','role','Rank','Group')
您的选择应该有效。。。也许它被推翻了?您是否尝试过选择('ranks.name as rank\u name')
或其他别名?
public function roles() {
return $this->belongsToMany('Role')
->join('role_user', 'role_user.role_id', '=', 'roles.id')
->join('ranks', 'ranks.id', '=', 'role_user.rank_id')
->join('groups', 'groups.id', '=', 'role_user.group_id');
}