laravel 过滤器搜索名称 [空格] 姓氏一起失败,个人姓名或姓氏搜索有效

Posted

技术标签:

【中文标题】laravel 过滤器搜索名称 [空格] 姓氏一起失败,个人姓名或姓氏搜索有效【英文标题】:laravel filter to search name [space] surname together fails, individual name or surname search works 【发布时间】: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,
        ]);
        
    

【问题讨论】:

【参考方案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

【讨论】:

是的,这就是我怀疑的情况。感谢您为我解释清楚。

以上是关于laravel 过滤器搜索名称 [空格] 姓氏一起失败,个人姓名或姓氏搜索有效的主要内容,如果未能解决你的问题,请参考以下文章

按名字和姓氏自动完成搜索

Django 搜索包含空格的字符串

如何在不同列上的名字和姓氏的不同行上搜索多个名称?

mongoDB中的名字和姓氏组合搜索

mongoDB中的名字和姓氏组合搜索

拆分一串名称并转置