【发布时间】:2022-01-05 14:37:33
【问题描述】:
我有一个顶部带有过滤功能的概览站点。用户可以过滤位置和部门。
控制器的代码如下所示:
public function index(Request $request)
{
$posts = Post::orderBy('titel')
->get();
$standorts = Standort::get();
$abteilungs = Abteilung::get();
if ($request->filled('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], ['standorts' => $standorts]);
}
我还需要提供$abteilungs = Abteilung::get();,但是当我这样返回时:
return view('posts.overview', ['posts' => $posts], ['standorts' => $standorts], ['abteilungs' => $abteilungs]);
括号中的最后一部分是灰色的,我无法访问它。
有没有办法使这项工作或返回视图仅限于两个参数?
【问题讨论】:
-
除此之外,您应该根据请求值进行条件查询,而不是从数据库中提取 everything 然后进行过滤。例如。
$posts = Post::orderBy('titel')->when($request->filled('s'), fn ($q) => $q->where('titel', 'like', '%'.$request->s.'%'))->get(); -
when()方法仅在第一个参数为真时执行第二个参数中的回调。 laravel.com/docs/8.x/queries#conditional-clauses
标签: php laravel laravel-blade