Yii CDbCriteria и выборка данных?

Я работаю с Yii и в админке у меня формируется вот такой URL:
site.ru/controller/action/active:1;trusted:1 ...

Строка: active:1;trusted:1 у нас данные для выборки.
К примеру я хочу получить все активных и доверенных пользователей

Это будет выглядеть как то так:
$criteria = new CDbCriteria;
        $criteria->limit     = ProcessingData::load()->limit();
        
         if(isset($params['active']) && is_numeric($params['active']))
               $criteria->compare('active',$params['active']);

         if(isset($params['trusted']) && is_numeric($params['active']))
               $criteria->compare('trusted',$params['trusted']);
        
        $criteria->order     = 'date DESC';
        $criteria->offset    = ProcessingData::load()->offset($params['page'],$criteria->limit);


Но бывает таких данных и 5 и 7 и постоянно приходится обрабатывать ифами и перечислять аргументы.

Подскажите пожалуйста есть ли способ проще ?
  • Вопрос задан
  • 6392 просмотра
Пригласить эксперта
Ответы на вопрос 5
@Nokyta
А чем не устроил стандартный метод search() в модели? В атрибуты модели загоняем все, что надо из гета, валидируем и потом получаем данные из поиска.
Ответ написан
error500
@error500
PHP-developer
Можно что то вроде этого попробовать
foreach( $params as $key=>$value )
{
    if(is_numeric($value))
    {
        $criteria->compare($key,$value);
     }
}


ну это в случае если всегда приходят числа, естественно.
Ответ написан
nepster-web
@nepster-web Автор вопроса
тут момент опять таки, откуда мы знаем, что в $key попадет существующее в колонке базы значение ?
Ответ написан
Комментировать
@Nc_Soft
Делайте ифами, меньше проблем будет.
Ответ написан
Комментировать
error500
@error500
PHP-developer
Я вообще на Yii не программирую, но если там используются entity как в доктрине или какие то другие вещи, то можно что то вроде этого попробовать:
foreach( $params as $key=>$value )
{
    //if( property_exists(new Class, $key) && is_numeric($value) )
    if( property_exists('Ваш класс', $key) && is_numeric($value) )
    {
         $criteria->compare($key,$value);
     }
}


Ну или как вам понравится больше, вариантов масса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы