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');
}