雄辩的幼虫中具有AND条件的产品过滤器

时间:2018-10-18 06:39:31

标签: php laravel eloquent laravel-5.6

我正在使用Laravel Eloquent中的数据透视表,这很好,但是我陷入无法找到解决方案的地步。 我有三个显示在下方

的表格

##植物##

id |名称

1 | plant_1
2 | plant_2
3 | plant_3

季节

id season_name

1 |夏天
2 |冬天
3 |仲夏

plant_to_season

id plant_id season_id

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 ,我到处搜索过,但是对此没有帮助。

1 个答案:

答案 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();