Yii findByAttributes () с атрибутом больше, чем. - PullRequest
12 голосов
/ 06 сентября 2011

Я уже некоторое время использую Yii, и когда я хочу получить данные из базы данных, я обычно просто использую findByAttributes.

$model=Auction::model()->findAllByAttributes(array('status'=>'1'));

Или что-то в этом роде.

Мой вопрос был бы, как бы я справился с ситуацией, превышающей тип?Я попытался

$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));

, где дате была назначена текущая дата / время, однако это вызывает ошибку.Итак, мой вопрос: мне нужно использовать условия и / или параметры?Должен ли я делать такие вещи в модели и / или использовать материал Criteria или CActiveDataProvider?

Буду признателен, если кто-нибудь направит меня в правильном направлении.Я всегда только что получил с помощью findAll (), но я знаю, что это лучший способ сделать это.Некоторая общая информация о том, что и когда использовать атрибуты, условия, параметры и т. Д. Также была бы полезной.

Я прочитал документацию по Yii и искал тонны сайтов для ответов на эти вопросы, но я не могу их найти.

Ответы [ 2 ]

20 голосов
/ 06 сентября 2011

Хорошая идея использовать params даже с findByAttributes, но это только соответствует. Вы можете использовать findAll и добавить оператор условия, и формат будет очень похож на то, что вы уже делаете:

$model=Auction::model()->findAll(array(
    'condition'=>'status=:status AND starttime >= :date',
    'params'=>array(':status'=>1, ':date'=>$date),
));

Если вы выполняли очень сложный запрос или строили запрос программным путем, вы можете использовать findAllBySql или CDbConnection :: createCommand или Query Builder , это зависит только от того, что наиболее полезно для вашего приложения.

Я бы (пере) прочитал раздел Yii по Работа с базами данных , хотя в нем нет подробных примеров, это довольно ясно. Затем вы можете попробовать учебник по Yii Blog, учебники Ларри Уллмана и т. Д.

5 голосов
/ 19 сентября 2014

Тип 2-го параметра findAllByAttributes смешанный, поэтому у нас (не бесконечно, но) много возможностей, например:

$model = Auction::model()->findAllByAttributes(
    array(
      'status' => 1
    ), 
    'starttime >= :date', 
    array(
        'date'=>$date
    )
));

или

$model = Auction::model()->findAllByAttributes(
    array(
      'status' => 1
    ), 
    array(
      'condition' => 'starttime >= :date'
      'params' => array('date'=>$date)
    )
));
...