我有一個站點,它顯示存盤在資料庫中的每個帖子,頂部有一個搜索欄。顯然,當用戶第一次訪問該頁面時,沒有應用搜索詞并且所有帖子都是可見的。
當用戶搜索一個詞并按下搜索按鈕時,一切正常。但是,當您從搜索欄中洗掉字串并再次按搜索時,所有帖子都消失了,當然可以使用滑鼠按鈕回傳并重新加載。但我想實作的是,當提交空搜索欄時,所有帖子都會出現。
這是表格:
<form action=" {{ route('overview') }}" method="get">
<div>
<input placeholder="Schlagwort" type="text" id="s" name="s" value="{{ request()->get('s') }}">
</div>
<button type="submit">Suchen</button>
</form>
這是具有搜索功能的控制器:
public function index(Request $request) {
$posts = Post::get();
if($request->has('s')) {
$query = strtolower($request->get('s'));
$posts = $posts->filter(function ($post) use ($query) {
if (Str::contains(strtolower($post->Titel), $query)) {
return true;
}
return false;
});
}
return view('posts.overview', ['posts' => $posts]);
}
我在嘗試實作“空搜索欄顯示所有“功能”時嘗試過這個
public function index(Request $request) {
$posts = Post::get();
if($request->has('s')) {
$query = strtolower($request->get('s'));
$posts = $posts->filter(function ($post) use ($query) {
if (Str::contains(strtolower($post->Titel), $query)) {
return true;
}
return false;
});
} else if ($request == ' ') {
return view('posts.overview', ['posts' => $posts]);
}
return view('posts.overview', ['posts' => $posts]);
}
也換了 else if ($request == null) ...
uj5u.com熱心網友回復:
您正在檢查s輸入是否存在,而您想要檢查它是否具有值。使用該filled()方法。
此外,您不必要地從資料庫中獲取所有內容,然后在 PHP 中進行過濾。相反,構建使用用于輸入值檢查的查詢的when()方法。
public function index(Request $request)
{
$posts = Post::query()
->when(
$request->filled('s'),
fn ($q) => $q->where('title', 'like', $request->s)
)
->get();
return view('posts.overview', ['posts' => $posts]);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/367068.html
