具有虚拟模型属性的CDbCriteria

时间:2014-05-25 12:08:10

标签: php mysql yii model

我使用CDbCriteria过滤CListView(产品页面)

    $criteria = new CDbCriteria();
    $criteria->join ='LEFT JOIN collections ON collections.id = t.collection_id';

    (isset($_GET['name'])) ? $name = $_GET['name'] : $name = "";
    $criteria->addCondition('t.name LIKE :name');
    $criteria->params = array(':name' => "%$name%");
    $criteria->order = 't.name asc';

    //get count
    $count = Products::model()->count($criteria);

但问题是:在产品模型中,我有一个名为ProductFinalPrice的虚拟属性,它根据用户角色计算最终价格。产品类别和用户特定产品价格。

如何按此虚拟属性排序?

1 个答案:

答案 0 :(得分:1)

如果您有一个可由数据库计算的简单虚拟属性,则需要使用SELECT [...] AS virtual attribute_name定义属性。 Hereherehere是其中的主题。

如果您的模型中的方法更复杂,则无法使用CActiveDataprovider。最好是使用可以使用虚拟属性的CArrayDataprovider。对不起,我现在找不到一个很好的例子。

请注意CArrayDataprovider有点不合理,所以你最好尽可能地避免使用它,并尽力将该虚拟属性的计算放在CDbCriteria的sql中。