Laravel 雄辩的搜索/过滤

我正在为我的电影资料实现过滤/搜索功能,我来自 symfony 背景,只是在学习 laravel 的过程中,我会将这个查询放在一个新的存储库中,例如FilmRepository保持查询独立并且控制器不那么混乱


我的第一个选择是在 repo 中创建一个连接查询,它将所有这些表连接在一起,但是如果我希望它过滤/搜索,即使没有选择特定的下拉选项怎么办?我有点迷失如何解决这个功能


这是我创建的需要更多工作的粗略回购功能


存储库


 public function searchFilms()

    {

        $films= Film::from('films')

            ->join('categories', 'films.id', '=', 'categories.film_id')

            ->join('locations', 'id', '=', 'location.id')

            ->join('age_rating', 'id', 'age_rating.id')

            ->orderBy('updated_at', 'desc');

    }

我知道我需要这些过滤器选项作为查询参数我如何在 laravel 中做到这一点?


我可以就如何解决此解决方案获得一些帮助吗?谢谢


皈依舞
浏览 117回答 1
1回答

慕的地6264312

在 laravel 控制器中,action 可以接收一个 Request 对象作为参数,该对象可用于从前端获取过滤器。public function searchFilms(Request $request){&nbsp;&nbsp; &nbsp; $data = $request->all();&nbsp; &nbsp; $user = Auth::user();&nbsp; &nbsp; return FilmResource::collection($this->repository->searchFilms($data));}Request 类有不止一种获取数据的方法,你可以阅读这篇文章来了解它们,但是,->all()(更多关于它的信息是其中一种方法。然后将数据传递给您的 searchFilms 函数并应用过滤器&nbsp;public function searchFilms($filters)&nbsp;{&nbsp; &nbsp; &nbsp; &nbsp; $films= Film::from('films')&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->join('categories', 'films.id', '=', $filters['film_id'])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->join('locations', 'id', '=', $filters['location_id'])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->join('age_rating', 'id', $filters['age_rating_id'])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ->orderBy('updated_at', 'desc');&nbsp;}类似的东西会起作用,我不知道你输入的名称,但你可以从中得到一个想法。已编辑因此,为了在评论中澄清您的问题。$request->all() 将返回您发布的数据的数组,其中输入的属性名称将是每个值的键。例如,假设我有以下 html 表单:<form>&nbsp;<input name="name" type="text" value="john doe" />&nbsp;<input name="age" type="text" value="39" /></form>$request->all()将是这样的数组['title' => 'john doe', 'age' => '39'];
打开App,查看更多内容
随时随地看视频慕课网APP