Yii findByAttributes()具有大于属性。

时间:2011-09-06 02:08:18

标签: php attributes yii params conditional-statements

我一直在使用Yii一段时间,当我想从数据库中提取数据时,我通常只使用findByAttributes。

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

或者那些东西。

我的问题是,我将如何处理大于类型的情况?我试过了

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

其中日期已分配了当前日期/时间设置,但这会导致错误。所以我的问题是我需要使用条件和/或参数吗?我应该在模型中使用Criteria或CActiveDataProvider这样的东西吗?

我很感激有人指着我正确的方向。我总是通过使用findAll()来获得,但我知道他们是更好的方法。关于什么以及何时使用属性,条件,参数等的一般信息也很好。

我已阅读Yii文档并搜索了大量网站以获取这些问题的答案,我找不到它。

2 个答案:

答案 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)
    )
));