Yii findByAttributes() с атрибутом больше, чем атрибутом.
Я использую Yii какое-то время, и когда я хочу извлечь данные из базы данных, я обычно использую findByAttributes.
$model=Auction::model()->findAllByAttributes(array('status'=>'1'));
Или что-то в этом роде.
Мой вопрос будет, как бы я справился с ситуацией, отличной от типа? Я попробовал
$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));
где дата была назначена текущей установкой даты/времени, однако это вызывает ошибку. Итак, мой вопрос: мне нужно использовать условия и/или параметры? Должен ли я делать подобные вещи в модели и/или использовать материалы Criteria или CActiveDataProvider?
Я был бы признателен, если бы кто-то указал мне в правильном направлении. Я всегда получал с помощью findAll(), но я знаю, что это лучший способ сделать это. Также будет приятной общая информация о том, что и когда использовать атрибуты, условия, парамы и т.д.
Я прочитал документацию Yii и искал множество сайтов для ответов на эти вопросы, и я не нашел их.
Ответы
Ответ 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)
)
));