Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向laravel中的连接表添加条件和联接_Php_Mysql_Laravel_Join - Fatal编程技术网

Php 向laravel中的连接表添加条件和联接

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->

我有一个用户表,它有userRole。我想添加一个条件,获取所有在userRole中具有“role\u id”1的用户

用户模型中的关系:

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();谢谢,这很有帮助。