Laravel-过滤查询

问题描述 投票:0回答:1

我正在创建一个过滤器查询端点API,该API将用于FE上的React,我想根据通过下拉菜单过滤的数据返回Film。例如,如果某个类别与搜索匹配,那么将列出与该特定类别匹配的所有电影资料。

我有3个查询参数CategoriesLocationsAge Ratings,每个参数与影片都有很多关系,每个参数都有自己的数据透视表以及相应的ID]]

电影

下面是与我的电影模型相关的多对多关系,包括表名,列和数据键。

categories(table)-> main(column) -> Action, Sport(data)

age_ratings(table)-> age(column) -> 18(data)

location(table)-> city(column) -> London(data)

表格

[FilmsCategoriesfilm_categoriesLocationage_ratingsfilm_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上,我想根据通过下拉菜单过滤的数据返回电影。例如,如果是类别...

php laravel api search filtering
1个回答
0
投票

模型中的Cretae范围方法Laravel scope

© www.soinside.com 2019 - 2024. All rights reserved.