为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 雄辩的搜索/过滤

Laravel 雄辩的搜索/过滤

PHP
皈依舞 2022-07-16 17:21:10
我正在为我的电影资料实现过滤/搜索功能,我来自 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 中做到这一点?我可以就如何解决此解决方案获得一些帮助吗?谢谢
查看完整描述

1 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

在 laravel 控制器中,action 可以接收一个 Request 对象作为参数,该对象可用于从前端获取过滤器。


public function searchFilms(Request $request)

    $data = $request->all();

    $user = Auth::user();


    return FilmResource::collection($this->repository->searchFilms($data));

}

Request 类有不止一种获取数据的方法,你可以阅读这篇文章来了解它们,但是,->all()(更多关于它的信息是其中一种方法。


然后将数据传递给您的 searchFilms 函数并应用过滤器


 public function searchFilms($filters)

 {

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

            ->join('categories', 'films.id', '=', $filters['film_id'])

            ->join('locations', 'id', '=', $filters['location_id'])

            ->join('age_rating', 'id', $filters['age_rating_id'])

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

 }

类似的东西会起作用,我不知道你输入的名称,但你可以从中得到一个想法。


已编辑


因此,为了在评论中澄清您的问题。


$request->all() 将返回您发布的数据的数组,其中输入的属性名称将是每个值的键。例如,假设我有以下 html 表单:


<form>

 <input name="name" type="text" value="john doe" />

 <input name="age" type="text" value="39" />

</form>

$request->all()将是这样的数组['title' => 'john doe', 'age' => '39'];


查看完整回答
反对 回复 2022-07-16
  • 1 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号