我正在创建一个过滤器查询端点API,该API将用于FE上的React,我想根据通过下拉菜单过滤的数据返回Film
。例如,如果某个类别与搜索匹配,那么将列出与该特定类别匹配的所有电影资料。
我有3个查询参数Categories
,Locations
,Age Ratings
,每个参数与影片都有很多关系,每个参数都有自己的数据透视表以及相应的ID]]
电影
下面是与我的电影模型相关的多对多关系,包括表名,列和数据键。
categories(table)-> main(column) -> Action, Sport(data)
age_ratings(table)-> age(column) -> 18(data)
location(table)-> city(column) -> London(data)
表格
[Films
,Categories
,film_categories
,Location
,age_ratings
,film_age_ratings
我一直在寻找不同的方法来解决此问题,但是不确定哪种方法最适合我的用例,下面我添加了到目前为止我在控制器中进行雄辩的查询以及使用联接进行回购所完成的代码,哪种方法更合适?
Controller
public function searchFilms(Request $request) { $this->user = Auth::user(); if ($request->has('categories')) { return $podcastProfile->where('main', $request->input('main'))->get(); } if ($request->has('languages')) { return $podcastProfile->where('name', $request->input('name'))->get(); } if ($request->has('location')) { return $podcastProfile->where('city', $request->input('city'))->get(); } return PodcastProfile::all(); }
存储库查询
但是我不确定如何根据他们选择的表和所需的列数据键来实际查询关系表以显示电影资料,如果未选择一个下拉列表,您仍然应该能够搜索结果
public function searchFilmsQuery(array $categories, array $locations, array $ageRatings) { $films= Film::from('films') ->join('categories', 'films.id', '=', $categories['film_id']) ->join('locations', 'id', '=', $locations['location_id']) ->join('age_rating', 'id', $ageRatings['age_rating_id']) ->orderBy('updated_at', 'desc'); }
我在某种形式的教程中看到了此链接,但我对如何将其应用于用例一无所知
https://laraveldaily.com/less-know-way-conditional-queries/
我正在创建一个过滤器查询终结点API,该API将用于FE上的React,在该API上,我想根据通过下拉菜单过滤的数据返回电影。例如,如果是类别...
模型中的Cretae范围方法Laravel scope