删除搜索词后显示所有内容
Displaying everything after search term is deleted
我有一个网站显示存储在数据库中的每个 post,顶部有一个搜索栏。
显然,当用户第一次访问该页面时,没有应用任何搜索词,并且所有 post 都是可见的。
当用户随后搜索一个词并按下搜索按钮时,一切正常。
但是,当您从搜索栏中删除字符串并再次按搜索时,所有 post 都消失了,当然可以使用鼠标按钮返回并重新加载。但我想实现的是,当提交空搜索栏时,所有 post 都会出现。
这是表格:
<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]);
}
我在尝试实现 'empty search bar display everything "feature" '
时试过这个
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) ...
编辑:我的问题被禁止了,因为我的问题没有被投票,但得到了回答,并且在评论中进行了一些很好的讨论。但是堆栈交换团队告诉我编辑我的问题以使它们更清楚,但他们收到了答案,所以我认为它们很清楚。我不是母语人士,所以我的英语不是最好的,我不能很好地表达自己。但是他们告诉我编辑它们,使它们看起来像新的并且可以被投票。我不明白为什么这有道理,但如果我得到一些赞成票,它可能会解除我的问题禁令,所以如果你不介意的话,也许可以投票。
您正在检查 s
输入是否存在,而您想检查它是否有值。为此使用 the filled()
method。
此外,您不必要地从数据库中获取所有内容,然后在 PHP 中进行过滤。相反,构建一个使用 the when()
method.
检查输入值的查询
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]);
}
我有一个网站显示存储在数据库中的每个 post,顶部有一个搜索栏。 显然,当用户第一次访问该页面时,没有应用任何搜索词,并且所有 post 都是可见的。
当用户随后搜索一个词并按下搜索按钮时,一切正常。 但是,当您从搜索栏中删除字符串并再次按搜索时,所有 post 都消失了,当然可以使用鼠标按钮返回并重新加载。但我想实现的是,当提交空搜索栏时,所有 post 都会出现。
这是表格:
<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]);
}
我在尝试实现 'empty search bar display everything "feature" '
时试过这个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) ...
编辑:我的问题被禁止了,因为我的问题没有被投票,但得到了回答,并且在评论中进行了一些很好的讨论。但是堆栈交换团队告诉我编辑我的问题以使它们更清楚,但他们收到了答案,所以我认为它们很清楚。我不是母语人士,所以我的英语不是最好的,我不能很好地表达自己。但是他们告诉我编辑它们,使它们看起来像新的并且可以被投票。我不明白为什么这有道理,但如果我得到一些赞成票,它可能会解除我的问题禁令,所以如果你不介意的话,也许可以投票。
您正在检查 s
输入是否存在,而您想检查它是否有值。为此使用 the filled()
method。
此外,您不必要地从数据库中获取所有内容,然后在 PHP 中进行过滤。相反,构建一个使用 the when()
method.
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]);
}