Php 向laravel中的连接表添加条件和联接
我有一个用户表,它有userRole。我想添加一个条件,获取所有在userRole中具有“role\u id”1的用户 用户模型中的关系:Php 向laravel中的连接表添加条件和联接,php,mysql,laravel,join,Php,Mysql,Laravel,Join,我有一个用户表,它有userRole。我想添加一个条件,获取所有在userRole中具有“role\u id”1的用户 用户模型中的关系: public function userRole() { return $this->hasOne(UserRole::class); } 和控制器代码: $users = User::with(["userRole" => function ($query){ $query->
public function userRole()
{
return $this->hasOne(UserRole::class);
}
和控制器代码:
$users = User::with(["userRole" => function ($query){
$query->where('role_id', 1);
}])->get();
这不好用。如果其role\u id为2,则获取所有用户并获取userRole,否则userRole为空 尝试加载反向关系。 大概是这样的:
//在UserRole.php文件中
公共功能用户()
{
返回$this->hasMany(用户::类);
}
你的问题是这样的:
$role=UserRole::with(“users”)->where('id',2)->get();
$users=$role->users;
这可能会对您有所帮助。请尝试在控制器中添加以下代码段
User::with(['userRole'])->wherehas('userRole', function ($query) {$query->where('role_id','1');})->get();
找到解决办法了吗?我们可以在哪里解决
User::with(['userRole'])->wherehas('userRole', function ($query) {$query->where('role_id','1');})->get();
说明:
with()
用于快速加载。因此,基本上,将与('userRole')
一起使用将获得该特定用户的所有角色
使用时:
User::with(["userRole" => function ($query){
return $query->where('role_id', 1);
}])->get();
你是在告诉Laravel,给我所有用户,以及他们的角色,但是获取的角色应该只有role\u id
的1
。不要选择此条件以外的角色
Laravel有一个函数whereHas
,它不选择任何东西,而是根据子对象的条件过滤父关系
比如说。我们需要获得角色id为1的用户:
User::wherehas('userRole', function ($q) {
return $q->where('role_id','1');
})->get();
现在,这将告诉Laravel获取所有至少有1个entry userRoles且角色id为1
的用户
这只会根据角色关系筛选用户。但是,我们需要单独添加with()
子句来获取角色
User::with('userRole')->wherehas('userRole', function ($q) {
return $q->where('role_id','1');
})->get();
但是这对我来说是不可行的,因为我还必须添加其他与用户的连接。您忘记添加“with('userRole')”,正确的一个是User::with(['userRole'])->wherehas('userRole',function($query){$query->where('role_id','1'))->get();谢谢,这很有帮助。