【问题标题】:Laravel 8 Livewire search filter not working with first where clauseLaravel 8 Livewire 搜索过滤器不适用于第一个 where 子句
【发布时间】:2021-09-26 18:05:16
【问题描述】:

我想要一个表格来显示每个具有过滤搜索输入的公司的所有数据,问题是当我输入第一个参数 where('company_id', Auth::user()->company_id) 时它会出错并且不会使过滤搜索工作。

$groups = Group::where('company_id', Auth::user()->company_id)
        ->orWhere('code', 'like', $filter)
        ->orWhere('name', 'like', $filter)
        ->orWhere('description', 'like', $filter)
        ->orWhereRaw("(CASE WHEN active = 1 THEN 'Active' ELSE 'Inactive' END) LIKE '%$filter%'")
        ->orderBy($this->column, $this->order)
        ->paginate($this->size);

这是我对表格的查询。

【问题讨论】:

  • 这不是真的,原始查询正在做其他事情,而 rhis 是评论,与您的查询相关,它没有失焦,这就是为什么是评论而不是答案的原因。 ..
  • 那么您打算如何在搜索输入中查询布尔值?不使用原始查询
  • 正如我在之前的 cmets 中所说,您在 PHP 中处理这个问题,而不是在 SQL 中... PHP 必须知道向 SQL 询问什么...阅读我的原始评论...
  • 这有什么参考资料吗,我似乎无法像你暗示的那样找到可靠的来源。
  • 这是基本的 Eloquent。您可以使用1 或true,它始终有效。你必须向我展示你的架构,这样我才能看到它的价值和它的名称(所以我理解得更好)

标签: php sql laravel eloquent laravel-livewire


【解决方案1】:

我想您希望 company_id 过滤器适用于所有 query 并结合其他 orWhere 条件。另一个orWhere 应该像这样分组在query 中:

$groups = Group::where('company_id', Auth::user()->company_id)
            ->where(function ($query) use ($filter) {
                return $query->where('code', 'like', $filter)
                    ->orWhere('name', 'like', $filter)
                    ->orWhere('description', 'like', $filter)
                    ->orWhereRaw("(CASE WHEN active = 1 THEN 'Active' ELSE 'Inactive' END) LIKE '%$filter%'");
            })
            ->orderBy($this->column, $this->order)
            ->paginate($this->size);

【讨论】:

    【解决方案2】:

    我已经解决了查询,通过添加另一个 where 语句与另一个 orWhere 语法如下。

    由于某种原因,上面的语法适用于 Vue,但是当我将 Vue 迁移到 Livewire 时

    $groups = Group::where('company_id', Auth::user()->company_id)
            ->where('code', 'like', $filter)
            ->orWhere('name', 'like', $filter)
            ->orWhere('description', 'like', $filter)
            ->orWhereRaw("(CASE WHEN active = 1 THEN 'Active' ELSE 'Inactive' END) LIKE '%$filter%'")
            ->orderBy($this->column, $this->order)
            ->paginate($this->size);
    

    【讨论】:

    • 混合多个where 和orWhere 而不像@nay 在他的回答中显示的那样对它们进行分组,可能会产生意想不到的结果。
    • 我想知道这会如何产生意想不到的结果吗?到目前为止,我在此查询方面没有遇到任何问题。
    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多