【发布时间】:2019-03-09 13:58:33
【问题描述】:
我需要搜索演示类型。
注意:我已经隐藏了其他搜索的简洁性。
背景:
表格:
- 用户 [id, name, ...]
- 演示 [id, name, user_id]
- 流派 [id, name]
- 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]);)。并展示符合条件的demo。
条件:
- 向用户展示演示 [在 (2,3,4) 中包含带有genre_id 的演示的结果]
- 仅显示在 (2,3,4) 中具有genre_id 的演示
- 如果 domo 的计数为零,则不向用户显示
【问题讨论】:
-
如果你仔细研究一下 $query->whereIn('genre_id',[2,3,4]);充当获取演示的子查询。我在这里看到的你必须使用 leftJoin 并添加 where 子句而不是使用雄辩的关系。
标签: laravel search filter eloquent relationship