Yii findByAttributes() с атрибутом больше, чем атрибут.


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

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

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

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

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

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

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

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

Author: user3004356, 2011-09-06

2 answers

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

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

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

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

 20
Author: ldg, 2011-09-06 04:39:25

Тип 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)
    )
));
 5
Author: Radu Dumbrăveanu, 2014-09-19 11:29:05