Laravel 根据一项或多项 eloquent 结果做某事

Laravel do something based on one or more eloquent results

所以我有一个搜索功能,我想根据结果显示不同的视图或重定向等。现在我正在做以下事情:

public function search()
{
    $results = Event::where('name', 'LIKE', "%{$this->search}%")->get();

    if ($results)
    {
        if ($results->count() > 1)
        {
            // return an index view with all search results
        }

        // There was only one result so we grab the result and redirect to the show view

        $result = Event::where('name', 'LIKE', "%{$this->search}%")->first();
        
        return redirect()->route(__('events.show'), [$result->slug]);
    }

    // No results
}

是的,虽然这确实有效,但我想知道是否有一种方法可以获得相同的结果,而不必像我现在所做的那样进行多次查询。是否可以仅通过一个查询来实现这一目标?不过,我不想遍历从初始 ->get() 结果中获得的集合。

我知道我可以做一个 firstOrfirstOrFail 的例子,但我不想根据 first 结果重定向,我仍然想检查是否有不止一个结果,如果是,显示所有这些结果。

get()return合集。您可以对集合本身执行 first()get(0) 以获得第一个结果 return。

$results = Event::where('name', 'LIKE', "%{$this->search}%")->get();

if ($results->isNotEmpty()) {
    return $results->count() === 1
        ? view('show', ['event' => $results->first()])
        : view('index', ['results' => $results]);
}

return view('no-results');