雄辩:查询多对多的关系

时间:2017-08-24 10:26:35

标签: php laravel laravel-5 laravel-5.2 laravel-5.4

我在用户和角色之间建立了多对多的关系:

用户模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
    /**
     * The roles that belong to the user.
     */
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

角色模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Role extends Model
{
    /**
     * The users that belong to the role.
     */
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

我的问题是如何才能获得属于某个特定角色名称的用户,例如,如果我有一个名为“author”的角色名称,我希望得到所有作者用户,如sql所示:

SELECT users.id, users.name 
FROM users, roles, role_user 
WHERE users.id = role_user.user_id
AND role_user.role_id = roles.id
AND roles.name="author";

注意:我正在使用Laravel 5.4

3 个答案:

答案 0 :(得分:1)

你应该试试这个:

Role::with(array('user'=>function($query){
        $query->select('id','name');
    }))
   ->where('role_name', 'author')
   ->get();

答案 1 :(得分:0)

User::whereHas('roles', function($query){
   $query->where('role_name', 'author')
})
->get(['name', 'id']);

您可以更改表role的列名,我使用了role_name

现在这应该有效,它将为仅具有至少一个角色的用户检索名称和ID

答案 2 :(得分:0)

您可以尝试以下代码:

$userRoles = Role::where('name', 'author')->with('users')->get();
$userRoles->users->id;
$userRoles->users->name;

$userRoles = Role::select('users.id, users.name')->where('name', 'author')->with('users')->get();