我有3个表 - 用户,角色和role_user。每个用户都被分配到role_user表中的角色,角色列表可以在角色表中找到。我想选择角色ID为12的所有用户。我目前正在使用查询构建器执行此操作,但我需要它以雄辩的格式。我对Laravel雄辩并不是很好,我需要帮助才能将查询转换为雄辩。 这就是我目前正在做的事情:
$users = DB::table('users')
->join('role_user', 'users.id', '=', 'role_user.user_id')
->join('roles', 'roles.id', '=', 'role_user.role_id')
->where('roles.id', '=', 12)
->get();
答案 0 :(得分:2)
使用Eloquent非常容易检索关系数据结帐,以及Laravel 5中的方案示例
我们有三个模型
1)用户(有一个role_user)
2)角色(有很多role_user)
3)RoleUser(属于用户和角色)
1)Users.php
<?php
namespace App\Models;
use Eloquent;
class Users extends Eloquent{
protected $table = 'users';
public function userrole()
{
return $this->hasOne('App\Models\RoleUser');
}
}
2)Roles.php
<?php
namespace App\Models;
use Eloquent;
class Roles extends Eloquent
{
protected $table = "roles";
public function rolesuser()
{
return $this->hasMany('App\Models\RoleUser');
}
}
2)RoleUser.php
<?php
namespace App\Models;
use Eloquent;
class RoleUser extends Eloquent{
protected $table = 'role_user';
public function user()
{
return $this->belongsTo('App\Models\Users');
}
public function role()
{
return $this->belongsTo('App\Models\Roles');
}
}
您需要检查数据库是否与模型中的关系和设置有关。用户在role_user表中有一个角色。角色在role_user表中为用户提供了许多角色。角色用户属于用户和角色。在laravel / database中设置关系后,可以轻松检索相关信息。
例如,如果要使用userrole检索用户,则需要编写:
$users = \App\Models\Users::with(['userrole'])->first();
如果您想获得用户角色名称,请写下:
$users->userrole->role->rolename;
/* here rolename the column name you have in role table for role name*/
现在来看你的问题:你想要选择那些只有角色ID为12的用户。现在以简单的格式编写它变得很简单。
$users = \App\Models\RoleUser::where('role_id', 12)->with(['user', 'role'])->get();
/* Here role_id is the column you have in role_user table as reference for role table */
您可以在此处了解详情:https://laravel.com/docs/5.6/eloquent-relationships
答案 1 :(得分:1)
要以雄辩的格式运行相同的数据库查询,您必须执行以下操作:
要在控制器或类中使用模型,您必须在php文件中启用它:
use App\User;
像这样运行对用户模型的引用。
$users = User::join('role_user','users.id', '=', 'role_user.user_id')
->join('roles', 'roles.id', '=', 'role_user.role_id')
-> where('roles.id', '=', 12)
->get();
$ users现在将成为一个集合,并受制于集合中可用的所有优秀方法。
我建议花点时间浏览laracast的免费视频教程,以真正理解Model与Eloquent的使用方式。此外,还可以查看开箱即用的Auth功能。我倾向于使用Auth对角色进行所有调用。希望这可以帮助。
答案 2 :(得分:0)
这将为角色ID为12的用户提供:
User::whereHas( 'roles', function ( $query ) {
$query->where( 'id', 12 );
} )->get();
我认为你正确地建立了关系。
如果你想动态传递$ role_id,请使用以下命令:
User::whereHas( 'roles', function ( $query ) use ($role_id) {
$query->where( 'id', $role_id );
} )->get();
答案 3 :(得分:0)
在角色模型中,您应该添加此
public function users()
{
return $this->hasMany('App\Models\User','role_id','id');
}
在控制器
中$allusrs = Role::with('users')->where('id','=','12');
dd($allusrs);