删除搜索词后显示所有内容

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]);
}