Eloquent many-to-many-to-many - how to load distan

2019-01-09 04:58发布

问题:

I have 3 tables; users, groups and permissions

In models I have the relationships set as belongsToMany in user model:

public function groups() {
    return $this->belongsToMany('Group');
}

in group model:

public function users() {
    return $this->belongsToMany('User');
}

public function permissions() {
    return $this->belongsToMany('Permission');
}

in permissions model:

public function groups() {
    return $this->belongsToMany('Group', 'id');
}

many users - to - many groups many groups - to - many permissions

I'm trying to get all the permissions a user has, and have no clue what the code for it should look like. Can anyone help?

回答1:

This is how you can do it:

User::where('id', $id)->with(['groups.permissions' => function ($q) use (&$permissions) {
     $permissions = $q->get()->unique();
}])->first();

// then
$permissions; // collection of unique permissions of the user with id = $id


回答2:

It should look something like this if you are eager loading...

$user = User::where('id', $id)->with(['groups.permissions'])->first();