为什么';我的Laravel条件哪里有查询工作?
我正在尝试创建一个有条件的为什么';我的Laravel条件哪里有查询工作?,laravel,eloquent,Laravel,Eloquent,我正在尝试创建一个有条件的用户搜索函数。用户可以选择三个过滤器进行搜索: 用户名 与用户关联的公司名称 与用户关联的角色名称 在下面的示例中,为了简单起见,我将所有过滤器放在数组$searchFilters中 我只希望Laravel搜索数组中存在的过滤器 代码 $q = request()->q; $searchWildcard = '%' . $q . '%'; $searchFilters = ['name', 'roles', 'company']; $users = User
用户
搜索函数。用户可以选择三个过滤器进行搜索:
- 用户名
- 与用户关联的公司名称
- 与用户关联的角色名称
$searchFilters
中
我只希望Laravel搜索数组中存在的过滤器
代码
$q = request()->q;
$searchWildcard = '%' . $q . '%';
$searchFilters = ['name', 'roles', 'company'];
$users = User::when(in_array('roles', $searchFilters), function ($query) use ($searchWildcard) {
$query->whereHas('roles', function($query) use ($searchWildcard) {
$query->where('name', 'LIKE', $searchWildcard);
});
})->when(in_array('company', $searchFilters), function($query) use ($searchWildcard) {
$query->whereHas('company', function($query) use ($searchWildcard) {
$query->orWhere('name', 'LIKE', $searchWildcard);
});
})->when(in_array('name', $searchFilters), function($query) use ($searchWildcard) {
$query->orWhere('name', 'LIKE', $searchWildcard);
});
查询的第一部分起作用:它根据用户的搜索查询检索角色,但不适用于公司名称或用户名
编辑
它只对公司名称不起作用。您
或where
条件在另一个where
中,因此我认为它不会像预期的那样起作用
我建议将您的where has
更改为或where has
,然后将其中的或where
更改为where
:
$users = User::when(in_array('roles', $searchFilters), function ($query) use ($searchWildcard) {
$query->whereHas('roles', function ($query) use ($searchWildcard) {
$query->where('name', 'LIKE', $searchWildcard);
});
})->when(in_array('company', $searchFilters), function ($query) use ($searchWildcard) {
$query->orWhereHas('company', function ($query) use ($searchWildcard) {
$query->where('name', 'LIKE', $searchWildcard);
});
})->when(in_array('name', $searchFilters), function ($query) use ($searchWildcard) {
$query->orWhere('name', 'LIKE', $searchWildcard);
});
您
或where
条件在另一个where
中,因此我认为它不会按预期工作
我建议将您的where has
更改为或where has
,然后将其中的或where
更改为where
:
$users = User::when(in_array('roles', $searchFilters), function ($query) use ($searchWildcard) {
$query->whereHas('roles', function ($query) use ($searchWildcard) {
$query->where('name', 'LIKE', $searchWildcard);
});
})->when(in_array('company', $searchFilters), function ($query) use ($searchWildcard) {
$query->orWhereHas('company', function ($query) use ($searchWildcard) {
$query->where('name', 'LIKE', $searchWildcard);
});
})->when(in_array('name', $searchFilters), function ($query) use ($searchWildcard) {
$query->orWhere('name', 'LIKE', $searchWildcard);
});
@很高兴我能帮忙@很高兴我能帮忙!