Laravel在分页的枢纽分析表中搜寻

时间:2018-10-04 08:26:52

标签: laravel search filter eloquent relationship

我需要搜索演示类型。

注意:为隐瞒简洁性,我还隐藏了其他搜索内容。

背景:

表格:

  1. 用户[id,名称,...]
  2. Demos [id,名称,user_id]
  3. 类型[id,名称]
  4. demo_genre(数据透视表)[demo_id,genre_id]

代码

$user = (new User)->newQuery();
$user->with(['demos' =>function($query) {
    $query->whereHas('genres', function ($query) {
        $query->whereIn('genre_id',[2,3,4]);
    });
}]);


$user->paginate();

注意:如果搜索结果中包含数据,则以上代码适用。但是,如果在数据透视表中找不到流派,则会返回空的demos数组。

问题:如何删除与提供的条件不匹配的结果(即:$query->whereIn('genre_id',[2,3,4]);)。并显示符合条件的演示。

条件:

  1. 显示具有演示的用户[具有(2,3,4)中genre_id的演示的结果]
  2. 仅显示在(2,3,4)中具有genre_id的演示
  3. 不向用户显示domo的计数是否为零

1 个答案:

答案 0 :(得分:2)

我认为您需要only the users who has demos which has particular genres

$user->whereHas('demos', function($demoQuery) {
    $demoQuery->whereHas('genres', function ($genreQuery) {
        $genreQuery->whereIn('id',[2,3,4]);
    });
})
->with([
    'demos' => function($demoQuery) {
        $demoQuery->whereHas('genres', function ($genreQuery) {
            $genreQuery->whereIn('id',[2,3,4]);
        });
])
->get();

where()用于过滤,with()用于加载演示。