Я не могу найти слишком много документации по применению области действия по умолчанию к модели в yii, мне было интересно, может ли кто-нибудь объяснить или указать мне правильное направление.
Быстрая версия моего вопроса:
Можно ли добавить отношение к области по умолчанию или добавить критерий «с» по умолчанию для каждого поиска AR в модели?
Длинная версия моего вопроса:
Краткое описание моего приложения:
У меня две модели, provider
и item
. Которые имеют отношение m :1, где у поставщика может быть много элементов, но у каждого элемента может быть только один поставщик.
Пока у меня такие отношения:
class Provider extends CActiveRecord
{
...
public function relations()
{
return array(
'items' => array(self::HAS_MANY, 'Item', 'id_provider', 'order'=>'rank DESC'),
);
}
...
}
class Item extends CActiveRecord
{
...
public function relations()
{
return array(
'provider' => array(self::BELONGS_TO, 'Provider', 'id_provider'),
);
}
...
}
В моей модели элементов у меня уже есть defaultScope, который отфильтровывает все автономные элементы (, т.е. отображает только элементы, для которых установлено значение offline = false
):
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'condition'=>"`$alias`.`offline` = false",
);
}
. Что я хочу сделать сейчас, так это отфильтровать элементы, для которых их провайдер отключен (, т.е. показывать только элементы, для которых provider.offline = false
наряду с текущимitem.offline = false
).
Я пытался присоединиться к таблице провайдеров в defaultScope:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'join'=>"JOIN `provider` AS `provider` ON `provider`.`id` = `$alias`.`id_provider`",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
Однако JOIN применяется после оператора ON и вызывает ошибку (CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'provider.offline' in 'on clause'
)..
Я также пытался добавить критерии with в defaultScope:
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'with'=>"provider",
'condition'=>"`$alias`.`offline` = false AND `provider`.`offline` = false",
);
}
Но я получаю ту же ошибку :SQLSTATE [42S22] :Столбец не найден :1054 Неизвестный столбец «provider.offline» в «предложении on» `).
Какие-либо предложения?