применение области действия по умолчанию со ссылкой на отношение в yii

Я не могу найти слишком много документации по применению области действия по умолчанию к модели в 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» `).

Какие-либо предложения?

5
задан Stu 15 August 2012 в 13:16
поделиться