eloquent:查询多对多关系
eloquent: query many to many relationship
我在用户和角色之间创建多对多关系,如下所示:
用户模型:
<?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
User::whereHas('roles', function($query){
$query->where('role_name', 'author')
})
->get(['name', 'id']);
您可以更改 table role
的列名称,我使用了 role_name
、
现在这应该可以工作了,它将仅检索具有至少一个角色的用户的名称和 ID
你应该试试这个:
Role::with(array('user'=>function($query){
$query->select('id','name');
}))
->where('role_name', 'author')
->get();
您可以试试下面的代码:
$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();
我在用户和角色之间创建多对多关系,如下所示:
用户模型:
<?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
User::whereHas('roles', function($query){
$query->where('role_name', 'author')
})
->get(['name', 'id']);
您可以更改 table role
的列名称,我使用了 role_name
、
现在这应该可以工作了,它将仅检索具有至少一个角色的用户的名称和 ID
你应该试试这个:
Role::with(array('user'=>function($query){
$query->select('id','name');
}))
->where('role_name', 'author')
->get();
您可以试试下面的代码:
$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();