Php 使用查询范围加载约束
我正在创建一个管理面板,我的数据库中有3个表:组、角色、用户。在users表和roles表之间存在多对多关系。 没有解释此功能的laravel文档Php 使用查询范围加载约束,php,laravel,eloquent,relationships,Php,Laravel,Eloquent,Relationships,我正在创建一个管理面板,我的数据库中有3个表:组、角色、用户。在users表和roles表之间存在多对多关系。 没有解释此功能的laravel文档 public function roles() { return $this->belongsToMany('App\Models\Role', 'user_roles'); } 我在groups表和users表之间有一对多的关系 public function group() { return $this->belon
public function roles() {
return $this->belongsToMany('App\Models\Role', 'user_roles');
}
我在groups表和users表之间有一对多的关系
public function group() {
return $this->belongsTo('App\Models\Group');
}
现在我想通过快速加载将过滤器应用于查询。有了这些,我想添加以下动态过滤器
public function scopeStatus($query, $status = null) {
// If status is empty then return the query itself
if (is_null($status)) {
return $query;
}
return $query->where('status', $status);
}
public function scopeRole($query, $role = null) {
// If role is empty then return the query itself
if (is_null($role)) {
return $query;
}
return $query->where('role', $role);
}
public function scopeGroup($query, $group = null) {
// If group is empty then return the query itself
if (is_null($group)) {
return $query;
}
return $query->where('group_id', $group);
}
这样我就可以进行一些查询,比如[状态和组id只是用户表中的列]
$users = User::with([
'roles' => function ($query) use ($request) {
$query->role($request['role']);
},
'group' => function($query) use ($request) {
$query->group($request['group']);
}
])
->status($request['status'])
->paginate(20);
但这是行不通的。我通过一个AJAX请求来实现这一点,并测试了请求参数。这就是我在执行dd($request)时得到的结果代码>
一切看起来都很好,但我总是收到空的东西。非常感谢您的帮助。我找到了问题的解决方案。我已经意识到,使用渴望加载时,在约束它们时不能添加范围。必须在闭包或查询生成器中执行所有条件语句
因此,对于我的问题,除了状态之外,不需要所有的作用域。这是新代码:
$users=User::with([
“角色”=>函数($query)使用($request){
if(为null($request['role'])){
$query;
}否则{
$query->where('id',$request['role']);
}
},
“组”=>函数($query)使用($request){
if(为null($request['group'])){
$query;
}否则{
$query->where('id',$request['group']);
}
}
])->状态($request['status']))
->分页(20)
在运行$users=User::…
之前,您能否显示示例dd($request)
?好的,我将把它作为编辑添加到问题中,从$users=User::status($request['status')->分页(20)开始代码>-是否获得预期结果?是否筛选组=1、角色=1、状态=1的用户?还是要加载状态为1的所有用户,但只加载组1和角色1?我要执行筛选器组=1角色=1和状态=1
array:3 [▼
"group" => "1"
"role" => "1"
"status" => "1"
]