尋求幫助修復我的搜索過濾器,目前它在搜索個人姓名或姓氏時作業正常,但在搜索組合姓名和姓氏(單詞之間有空格)時失敗。我覺得我已經很接近按照我的意愿讓它作業了,但就是做對了。任何幫助將不勝感激。
我的模型:
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,
]);
}
}
uj5u.com熱心網友回復:
解決這個問題的方法是使用 DB Facade,以便連接 name 和 surname,然后將其與 value 進行比較。如果我是你,我會做這樣的事情:
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 . '%')
);
);
}
uj5u.com熱心網友回復:
讓我們以 John Doe 為例。
$searchTerm |
姓名 | 姓 |
|---|---|---|
| 約翰 | X | —— |
| 美國能源部 | —— | X |
| 約翰·多伊 | —— | —— |
因為您已經在資料庫中拆分了名字和姓氏,所以您需要再次組合它或拆分您的$searchTerm。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/344426.html
