[英]Laravel Spatie Query Builder - create OR condition for filters
我正在使用 laravel spatie 过滤模型我在允许的过滤器数组中有以下过滤器
$this->allowedFilters = [
'name',
AllowedFilter::exact('company_id'),
'location',
'summary',
'client_name',
];
当我提出要求时
past-projects?filter[company_id]=${companyId}&filter[name]=${search}&filter[summary]={company_id}
它使用 AND 条件搜索完全包含所有传递的搜索参数的数据,如果传递的任何参数不匹配,则不返回任何结果。 如果任何传递的参数匹配,我想得到结果。
任何帮助将不胜感激。
根据Spatie Laravel Query Builder 文档, allowedFilters()
方法将获取字符串数组并返回所有参数匹配的结果。
坏消息:因此,它不会像您打算使用的那样工作。
你想要的是 Laravel 的Or Where 子句。
好消息:由于 Spatie Laravel 查询构建器扩展了 Laravel 的默认 Eloquent 查询构建器,您可以同时使用 Laravel 查询和 Spatie 查询。
假设您想从“Org ABC”中获取所有用户,并且您想从该结果中获取名称为“Jack”或位置为“USA”或客户端名称为“John”或摘要为“Hello World”的所有用户。 那你可以试试
$result = QueryBuilder::for(Projects::class)
->allowedFilters(['company_id']
->where(function ($query) use ($name, $location, ...)
$query
->where('projects.user.name', 'like', '%$title%')
->orWhere('projects.location', 'like', '%$location%')
->orWhere() ....
);
return $result
我遇到了这个问题......这是我解决它的一种方法。 您也可以像这样在查询构建器中使用回调...
$users = QueryBuilder::for(User::class)
->allowedFilters([
'user_type',
'user_city',
AllowedFilter::exact('status')->default('new'),
AllowedFilter::callback('search', function($query, $value){
$query->where('name', 'LIKE', '%' . $value . '%')
->orWhere('bio', 'LIKE', '%' . $value . '%')
->orWhere('state', 'LIKE', '%' . $value . '%')
->orWhere('address', 'LIKE', '%' . $value . '%');
})
])->get();
那么 URL 将如下所示
?filter[user_type]=customer&filter[search]=doe&filter[user_city]=boston
搜索参数将用于检查姓名、简历、状态和地址是否匹配。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.