Как отфильтровать данные по промежуточной таблице-связке (hasMany/hasOne с via/viaTable) в модели Yii2?

есть связка по схеме Покупатель - Продажи - Поставщик, т.е. Покупатель связан с поставщиками через Продажи
для getter в модели Покупателя имеем
return $this->hasMany(ПОСТАВЩИКИ::className(), ['ПОСТАВЩИК_ID' => 'ПРОДАЖИ_ID_ПОСТАВЩИКА'])
->viaTable('ПРОДАЖИ', ['ПРОДАЖИ_ID_ПОКУПАТЕЛЯ' => 'ПОКУПАТЕЛЬ_ID'])

Некоторые продажи отменены или ещё не состоялись, т.о. в таблице продаж записи помечены как неактивные.
Добавление where/andWhere на поля таблицы Продажи не работает.
Возможно сделать join таблицы Продажи и уже тогда фильтровать, но это выглядит как костыль.
Как отфильтровать данные по промежуточной таблице-связке (hasMany/hasOne с via/viaTable) в модели Yii2?
  • Вопрос задан
  • 772 просмотра
Решения вопроса 1
@davidnum95
return $this->hasMany(ПОСТАВЩИКИ::className(), ['ПОСТАВЩИК_ID' => 'ПРОДАЖИ_ID_ПОСТАВЩИКА'])
         ->viaTable(
              'ПРОДАЖИ', 
              ['ПРОДАЖИ_ID_ПОКУПАТЕЛЯ' => 'ПОКУПАТЕЛЬ_ID'], 
              function ($query) {
                    $query->andWhere(['СТАТУС_ПРОДАЖИ' => 'АКТИВНА']);
              });
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
villiwalla
@villiwalla
HTML-верстка
return $this->hasMany(ПОСТАВЩИКИ::className(), ['ПОСТАВЩИК_ID' => 'ПРОДАЖИ_ID_ПОСТАВЩИКА'])
->viaTable('ПРОДАЖИ', ['ПРОДАЖИ_ID_ПОКУПАТЕЛЯ' => 'ПОКУПАТЕЛЬ_ID'])->where(['table_name.columns'  => value])
Ответ написан
@vnpp Автор вопроса
Наиболее гибкий вариант - выполнить самостоятельно все JOIN'ы и фильтровать по любым полям промежуточных таблиц.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы