我一直在使用Yii一段时间,当我想从数据库中提取数据时,我通常只使用findByAttributes。
$model=Auction::model()->findAllByAttributes(array('status'=>'1'));
或者那些东西。
我的问题是,我将如何处理大于类型的情况?我试过了
$model=Auction::model()->findAllByAttributes(array('starttime'>=$date));
其中日期已分配了当前日期/时间设置,但这会导致错误。所以我的问题是我需要使用条件和/或参数吗?我应该在模型中使用Criteria或CActiveDataProvider这样的东西吗?
我很感激有人指着我正确的方向。我总是通过使用findAll()来获得,但我知道他们是更好的方法。关于什么以及何时使用属性,条件,参数等的一般信息也很好。
我已阅读Yii文档并搜索了大量网站以获取这些问题的答案,我找不到它。
答案 0 :(得分:20)
使用params甚至使用findByAttributes是一个好主意,但这只是匹配。您可以使用findAll并添加条件语句,格式与您正在执行的操作非常相似:
$model=Auction::model()->findAll(array(
'condition'=>'status=:status AND starttime >= :date',
'params'=>array(':status'=>1, ':date'=>$date),
));
如果您正在进行非常复杂的查询或以编程方式构建查询,您可能需要使用findAllBySql或CDbConnection :: createCommand或Query Builder,这只取决于对您的应用最有意义的内容。
我会(重新)阅读Working with Databases上的Yii部分,虽然它没有广泛的例子,但很清楚。然后你可以尝试Yii Blog教程,Larry Ullman's tutorials等等。
答案 1 :(得分:5)
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)
)
));