Yii2: ActiveQuery «с» не работает
У меня есть три модели / db-таблицы, связанные с 1: n каждая: Anorder
имеет несколькоcommissions
и комиссия имеет несколькоcommission_positions
, Следовательно, Commission_position имеет FK-поле, содержащее идентификатор комиссии. Сама комиссия имеет FK-поле, содержащее идентификатор заказа.
Заказ> Комиссия> КомиссияПозиции
проблемаТеперь мне нужно выбрать все позиции CommissionPosition, имеющие определенное значение в связанной модели заказа. Очевидное решение - использовать Query-Object of CommissionPosition, который я расширил с помощью именованной области видимости. Именованная область видимости выглядит так:
class CommissionPositionQuery extends ActiveQuery
{
/**
* Named scope to filter positions of a certain alpha order id
* @param integer $id the alpha order id
* @return \common\models\query\CommissionPositionQuery
*/
public function alphaOrderId($id)
{
//TODO: with not working
$this->with(['commission.order']);
$this->andWhere(['alpha_order_id'=>$id]);
return $this;
}
}
Отношениеcommission
определяется по комиссии-модели и работает. Второе отношениеorder
определяется по модели комиссии и работает также. Отфильтрованное полеalpha_order_id
находится в таблице заказов. Теперь я выполняю запрос следующим образом:
$filteredPositions = CommissionPosition::find()->alphaOrderId(17)->all();
Область действия вызывается успешно и используется часть where, но когда я проверяю сгенерированный SQL, я не вижу операторов join, хотя я используюwith
-метод, чтобы сказать yii, чтобы получить отношения вместе. Ответом является «неизвестный столбец alpha_order_id», который имеет смысл, поскольку нет соединения с соответствующими таблицами. Это сгенерированный SQL:
SELECT * FROM `commission_position` WHERE (`alpha_order_id`=17)
Что мне не хватает? Это ошибка в Yii2?