我有用于管理用户的表及其与其关系的角色。我想要管理用户列表及其各自的角色。
我尝试了以下查询
$adminusers = Admin::whereHas('roles', function($q)
{
$q->where('roles.name', '<>', 'Superadmin');
$q->select('roles.name as roles');
})->select('id', 'name')->where('admins.status', 'A')->where('admins.is_delete', '0')->paginate(15);
但我无法从中检索角色名称。
那么如何从上面查询中获取角色名称?
您无法从Where Here关闭中选择。其中使用在这种情况下限制管理员的结果,而不是检索角色。
您可以查询类似特定模型的关系:
$singleAdmin->roles()->where('roles.name', '<>', 'Superadmin')->get();
,或者您可以在急切的加载过程中放置约束:
Admin:::with(['roles' => function ($query) {
$q->where('roles.name', '<>', 'Superadmin');
}])->get();
https://laravel.com/docs/5.4/eloquent-relationships#condernaging-eager-loads
急切地加载后,您需要访问$singleAdmin->roles
的角色集合。
在某些情况下,只使用加入。
您可以使用左Join方法。
`$admins = Admin::leftJoin('roles','admin.role_id','=','roles.id')
->select('id', 'name')
->where('admins.status', 'A')
->where('admins.is_delete', '0')
->paginate(15)`
或者您可以在模型文件中进行
`public function role()
{
return $this->hasOne(AppModelsRoles::class, 'id', 'role_id');
}`