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()
结果中获得的集合。
我知道我可以做一个 firstOr
或 firstOrFail
的例子,但我不想根据 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');
所以我有一个搜索功能,我想根据结果显示不同的视图或重定向等。现在我正在做以下事情:
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()
结果中获得的集合。
我知道我可以做一个 firstOr
或 firstOrFail
的例子,但我不想根据 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');