laravel 过滤器搜索名字 [space] 姓氏一起失败,个人名字或姓氏搜索有效
laravel filter to search name [space] surname together fails, individual name or surname search works
寻求帮助修复我的搜索过滤器,目前它在搜索个人姓名或姓氏时工作正常,但在搜索姓名和姓氏组合时失败(单词之间有 space)。我觉得我已经非常接近按照我的意愿让它工作了,但就是做不好。任何帮助将不胜感激。
我的模特:
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,
]);
}
}
让我们以 John Doe 为例。
$searchTerm
name
surname
John
X
-
Doe
-
X
John Doe
-
-
因为您在数据库中拆分了名字和姓氏,所以您需要再次合并它或拆分您的 $searchTerm
。
解决这个问题的方法是使用 DB facade,以便连接姓名和姓氏,然后将其与值进行比较。
如果我是你,我会做这样的事情:
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 . '%')
);
);
}
寻求帮助修复我的搜索过滤器,目前它在搜索个人姓名或姓氏时工作正常,但在搜索姓名和姓氏组合时失败(单词之间有 space)。我觉得我已经非常接近按照我的意愿让它工作了,但就是做不好。任何帮助将不胜感激。
我的模特:
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,
]);
}
}
让我们以 John Doe 为例。
$searchTerm |
name | surname |
---|---|---|
John | X | - |
Doe | - | X |
John Doe | - | - |
因为您在数据库中拆分了名字和姓氏,所以您需要再次合并它或拆分您的 $searchTerm
。
解决这个问题的方法是使用 DB facade,以便连接姓名和姓氏,然后将其与值进行比较。 如果我是你,我会做这样的事情:
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 . '%')
);
);
}