【问题标题】:laravel filter to search name [space] surname together fails, individual name or surname search workslaravel 过滤器搜索名称 [空格] 姓氏一起失败,个人姓名或姓氏搜索有效
【发布时间】:2021-12-16 13:20:40
【问题描述】:

寻求帮助修复我的搜索过滤器,目前它在搜索个人姓名或姓氏时工作正常,但在搜索姓名和姓氏组合时失败(单词之间有空格)。我觉得我已经非常接近让这个工作如我所愿,但就是无法做到。任何帮助将不胜感激。

我的模特:

public function scopeSearchFilter($query, array $filters) {
        $searchTerm = $filters[0];
        $category = $filters[1];

        $query->when($filters[0] ?? false, fn($query, $searchTerm) =>
            $query->whereHas('author', fn ($query) =>
                $query->where('name', 'like', '%' . $searchTerm . '%')
                ->orWhere('surname', 'like', '%' . $searchTerm . '%')
            )
        );
}

我的控制器(顺便说一句,使用 livewire):

    public $search;
    public $category;
   
    public function render()
    {   
        $search = $this->search;
        $category = $this->category;

        $posters = Poster::searchFilter([$this->search, $this->category])->paginate(10);
            
        return view('livewire.poster-data', [
            'posters' => $posters,
        ]);
        
    }
}

【问题讨论】:

    标签: laravel eloquent laravel-7


    【解决方案1】:

    解决这个问题的方法是使用 DB 外观,以便连接姓名和姓氏,然后将其与值进行比较。 如果我是你,我会做这样的事情:

    use Illuminate\Support\Facades\DB;
    
    
    public function scopeSearchFilter($query, array $filters) {
            $searchTerm = $filters[0];
            $category = $filters[1];
    
            $query->when($filters[0] ?? false, fn($query, $searchTerm) =>
                $query->whereHas('author', fn ($query) =>
                    $query->where('name', 'like', '%' . $searchTerm . '%')
                         ->orWhere('surname', 'like', '%' . $searchTerm . '%')
                         ->orWhere(DB::raw("CONCAT(`name`,' ',`surname`)"), 'like', '%' . $searchTerm . '%')
                    );
                );
    }
    

    【讨论】:

      【解决方案2】:

      让我们以 John Doe 为例。

      $searchTerm name surname
      John X -
      Doe - X
      John Doe - -

      因为您已经在数据库中拆分了姓名和姓氏,所以您需要再次合并它或拆分您的 $searchTerm

      【讨论】:

      • 是的,这就是我怀疑的情况。感谢您为我解释清楚。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2011-09-08
      • 1970-01-01
      • 2018-09-02
      相关资源
      最近更新 更多