【问题标题】:Laravel Spatie Query Builder - create OR condition for filtersLaravel Spatie Query Builder - 为过滤器创建 OR 条件
【发布时间】:2021-10-05 05:47:25
【问题描述】:

我正在使用 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条件搜索完全包含所有传递的搜索参数的数据,如果传递的任何参数不匹配,则不返回任何结果。如果任何传递的参数匹配,我想得到结果。

任何帮助将不胜感激。

【问题讨论】:

    标签: php laravel laravel-query-builder


    【解决方案1】:

    根据Spatie Laravel Query Builder documentationallowedFilters() 方法将获取字符串数组并返回所有参数匹配的结果。

    坏消息:因此,它不会像您打算使用的那样工作。

    你想要的是 Laravel 的Or Where Clause

    好消息:由于 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
    

    【讨论】:

    • do not post pictures of text,将该文本放入您的帖子中(使用适当的标记)。
    • 你能解释一下“好消息”部分以获得我想要的结果吗
    • @AfzalAli 我已经用详细信息更新了答案:)
    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2021-08-20
    • 2021-01-18
    • 1970-01-01
    • 2018-05-24
    • 2018-10-18
    • 2021-10-29
    • 2020-08-09
    • 2020-09-09
    • 2015-04-26
    相关资源
    最近更新 更多