Php 在Laravel 5上获得三级关系

Php 在Laravel 5上获得三级关系,php,mysql,orm,laravel-5,relationship,Php,Mysql,Orm,Laravel 5,Relationship,我试图获得一个三级关系数据,但我对使用Laravel5.1感到迷茫 我会尽力解释我的情况,希望你能帮我 我有两种型号,分别叫Host和User。 这些模型按主机组和用户组模型分组,使用多对多关系 然后我得到了一个名为usergroup\u hostgroup\u permissions的表,它将usergroup与hostgroup关联起来: +--------------+----------------------+------+-----+---------------------+---

我试图获得一个三级关系数据,但我对使用Laravel5.1感到迷茫

我会尽力解释我的情况,希望你能帮我

我有两种型号,分别叫
Host
User
。 这些模型按
主机组
用户组
模型分组,使用多对多关系

然后我得到了一个名为
usergroup\u hostgroup\u permissions
的表,它将
usergroup
hostgroup
关联起来:

+--------------+----------------------+------+-----+---------------------+----------------+
| Field        | Type                 | Null | Key | Default             | Extra          |
+--------------+----------------------+------+-----+---------------------+----------------+
| id           | int(10) unsigned     | NO   | PRI | NULL                | auto_increment |
| usergroup_id | int(10) unsigned     | NO   | MUL | NULL                |                |
| hostgroup_id | int(10) unsigned     | NO   | MUL | NULL                |                |
| action       | enum('allow','deny') | NO   |     | allow               |                |
| enabled      | tinyint(1)           | NO   |     | 1                   |                |
+--------------+----------------------+------+-----+---------------------+----------------+
我想获得一个属于某个用户组的用户列表,该用户组与我的主机所属的主机组具有此表中的关系

例如:

我的主机\u 1属于
开发服务器
。
在
usergroup\u hostgroup\u permissions
表中,有一个条目允许
开发人员访问
DEV\u服务器。
用户组
developer
有3个用户user\u 1、user\u 2和user\u 3


有什么提示吗?提前谢谢

为了获得特定主机中的用户列表,您需要使用
用户
模型上的
whereHas
方法嵌套所有底层关系(通过
)。i、 e

$users = User::whereHas('usergroup.hostgroups.hosts', function($q) use ($hostID){
    $q->where('id', $hostID);
})->get();
此外,如果要检查是否允许用户访问该特定主机,则可以将另一个
where()
链接到上述主机:

$users = User::whereHas('usergroup.hostgroups.hosts', function($q) use ($hostID){
    $q->where('id', $hostID)->where('usergroup_hostgroup_permissions.action', 'allow');
})->get();
注意:如果您收到关于不明确的
id
字段的警告,请尝试包括该id所属的表
hosts
,即
hosts.id

我假设您已将这些模型的关系定义如下:

class HostGroup extends Eloquent {

    /** ...
    */

    public function hosts(){
        return $this->hasMany('App\Host');
    }

    public function usergroups(){
        return $this->belongsToMany('App\UserGroup', 'usergroup_hostgroup_permissions');
    }
}




希望能有所帮助。

抱歉,现在还不太清楚,是否要使用主机id获取列表?您好@AhmadBaktashHayeri,我只列出了其中一个表。我想获得有权访问主机1的用户。为了获得这个,我们需要一个主机组属于主机1,然后获得对这个主机组具有“允许”访问权限的用户组。嘿,Paco,你检查过我的答案了吗,我认为这会满足你的目的。嗨@ahmad baktash hayeri,你的实现非常完美。。。非常感谢你。
class Host extends Eloquent {
    /** ...
    */

    public function hostgroup() {
        return $this->belongsTo('App\HostGroup');
    }
}
class UserGroup extends Eloquent {
    /** ...
    */    

    public function users(){
        return $this->hasMany('App\User');
    }

    public function hostgroups(){
        return $this->belongsToMany('App\HostGroup', 'usergroup_hostgroup_permissions');
    }
}
class User extends Eloquent {
    /** ...
    */

    public function usergroup(){
        return $this->belongsTo('App\UserGroup');
    }
}