我有自定义索引查询
$resourceTable = 'soft';
$user = Auth::user();
$orderBy = $request->get('orderBy');
$dir = $request->get('orderByDirection');
$query->select(DB::raw("{$resourceTable}.*"));
if (!$user->isGlobalAdmin) {
$roles = json_decode($user->getRoleNames());
$rolesArray = [];
foreach ($roles as $roleName) {
$role = json_decode(Role::findByName($roleName));
$rolesArray[] = $role->id;
}
$query->join('model_has_roles', 'model_id', '=', "{$resourceTable}.id")
->where('model_type', '=', 'App\Models\Soft')
->whereIn('role_id', $rolesArray);
}
当我加载资源sql的索引页时
select soft.* from `soft`
inner join `model_has_roles` on `model_id` = `soft`.`id`
where `model_type` = 'App\\Models\\Soft' and `role_id` in (2, 3)
我有角色过滤器。
申请代码是
$roles = $value;
$rolesArray = [];
foreach ($roles as $roleName) {
$role = json_decode(Role::findByName($roleName));
$rolesArray[] = $role->id;
}
return $query->whereIn('role_id', $rolesArray);
当我在过滤器中设置一个时,我得到了 sql
select soft.* from `soft`
inner join `model_has_roles` on `model_id` = `soft`.`id`
where `role_id` in (3) and `model_type` = App\\Models\\Soft and `role_id` in (2, 3)
2次role_id IN,如何改成只有一次?
通过确保每个role_id都在第一个或第二个数组中
$rolesArray
查询时:$query->whereIn('role_id', $rolesArray);
并删除两个查询语句之一