我已经使用Yii一段时间了,当我想从数据库中提取数据时,我通常只使用findByAttributes。
$model=Auction::model()->findAllByAttributes(array('status'=>'1'));
之类的。
我的问题是,我如何处理大于类型的情况?I tried
$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));
where date已被分配了当前日期/时间设置,但这会导致错误。我的问题是我需要使用条件和参数吗?我应该做这种类型的东西在模型和/或使用标准或CActiveDataProvider的东西?
如果有人给我指出正确的方向,我会很感激。我总是使用findAll()s,但我知道它们是更好的方法。一些关于什么和什么时候使用属性、条件、参数等的一般信息也会很好。我已经阅读了Yii文档,并搜索了大量的网站来寻找这些问题的答案,但我没有找到。
使用params是一个好主意,即使是findByAttributes,但那只做匹配。您可以使用findAll并添加一个条件语句,格式将与您已经做的非常相似:
$model=Auction::model()->findAll(array(
'condition'=>'status=:status AND starttime >= :date',
'params'=>array(':status'=>1, ':date'=>$date),
));
如果你正在做一个非常复杂的查询或以编程方式构建查询,你可能想要使用findAllBySql或CDbConnection::createCommand或查询生成器,它只是取决于什么对你的应用程序最有意义。
我会(重新)阅读Yii关于使用数据库的部分,虽然它没有大量的示例,但它非常清楚。然后你可以试试Yii Blog的教程,Larry Ullman的教程等等。
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)
)
));