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 过滤器搜索名称 [空格] 姓氏一起失败,个人姓名或姓氏搜索有效的主要内容,如果未能解决你的问题,请参考以下文章