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