Подтвердить что ты не робот

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

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

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

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

Мой вопрос будет, как бы я справился с ситуацией, отличной от типа? Я попробовал

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

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

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

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

4b9b3361

Ответ 1

Хорошая идея использовать параметры даже с 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, учебники Ларри Ульмана и т.д.

Ответ 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)
    )
));