Фильтры продукта с условием AND в красноречивом текстиле - PullRequest
0 голосов
/ 18 октября 2018

Я работаю с сводной таблицей в Laravel Eloquent, и это здорово, но я застрял в такой ситуации, когда не могу найти решение.У меня есть три таблицы, показанные ниже

## plant ##

id |имя

1 |завод_1
2 |завод_2
3 |plant_3

сезонов

id | имя_ сезона

1 |Лето
2 |Зима
3 |Середина лета

plant_to_season

id | plant_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 голосов
/ 18 октября 2018

Это кажется более хитрым, чем ожидалось. Вы должны использовать метод 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();
...