Laravel 8 Livewire 搜索过滤器不适用于第一个 where 子句

Laravel 8 Livewire search filter not working with first where clause

我想要一个 table 来显示每个公司的所有数据,它有一个过滤器搜索输入,问题是当我输入第一个参数时 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);

这是我对 table 的查询。

我想您希望 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);

我已经解决了查询,通过添加另一个 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);