Скрыть мягко удаленные элементы в Yii

Мне интересно: возможно ли в Yii добавить какое-то свойство в модель, поэтому только отображаются элементы со свойством isdeleted, установленным как 0?

Итак, я ищу способ, чтобы Yii просто игнорировал эти экземпляры элементов... Что-то вроде:

public function rules()
{
    return array(
        ...
        array('isdeleted', 'shouldEqualTo=>0'),
        ...
    );
}

Я думал, что можно повозиться с rules(), но это не работает или я делаю это неправильно...


person Ferdau    schedule 12.08.2014    source источник
comment
Что вы подразумеваете под игнором? При поиске или сохранении?   -  person W.B.    schedule 12.08.2014
comment
Я имею в виду при поиске   -  person Ferdau    schedule 12.08.2014


Ответы (2)


Вы должны использовать scopes() для этого.

public function scopes()
{
    return array('active' => array('condition' => 'isdeleted = 0'));
}

Затем

$active = MyModel::model()->active()->findAll();

ИЗМЕНИТЬ:

Если вы хотите сделать фильтр по умолчанию, реализуйте defaultScope(). функция:

public function defaultScope()
{
    return array('condition' => 'isdeleted = 0');
}
person W.B.    schedule 12.08.2014
comment
Можно ли переопределить область действия по умолчанию? Так что MyModel::model()-›findAll(); уже сделал бы это? - person Ferdau; 12.08.2014

Благодаря ответу WB, который я знал, чтобы изучить scopes, вы можете использовать scopes как WB сделал:

public function scopes()
{
    return array('active' => array('condition' => 'isdeleted = 0'));
}

а затем использовать

$active = MyModel::model()->active()->findAll();

Если вы не хотите менять свой код в своем проекте (как я), вы можете использовать:

public function defaultScope()
{
    return array(
        'condition' => 'isdeleted = 0',
    );      
}

а затем использовать

$active = MyModel::model()->findAll();
person Ferdau    schedule 12.08.2014