我正在使用Laravel Eloquent中的数据透视表,这很好,但是我陷入无法找到解决方案的地步。 我有三个显示在下方
的表格 1 | plant_1
2 | plant_2
3 | plant_3
1 |夏天
2 |冬天
3 |仲夏
1 | 1 | 1
2 | 2 | 2
3 | 3 2
4 | 3 3
现在,如果我应用类似的过滤器
$filters = array(1,2,3);
\App\Plant::with(['seasons' => function($query) use ($filters) {
return $query->wherein('seasons.id', $filters);
}])->groupBy('id')->get();
此代码将我所有的三种植物都归还给我。但是我真正想要的是那些完全具备这3个给定过滤器的植物。 从 laravel文档到 Stackoverflow ,我到处搜索过,但是对此没有帮助。
答案 0 :(得分:0)
这似乎比预期的要棘手,您应该使用whereHas
方法而不是with
,然后遍历过滤器:这是我对如何解决此问题的建议,但是可行有一个更短的解决方案:
$filters = array(1,2,3);
$outquery = \App\Plant::where('id','>',1);
foreach( $filters as $filter){
$outquery = $outquery->whereHas('seasons', function($query) use ($filter){
$query->where('id','=',$filter);
});
}
return $outquery->get();