2014-05-25 66 views
0

我使用CDbCriteria來篩選CListView中(產品頁)CDbCriteria與虛擬模型屬性

$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

如果您有一個簡單的虛擬屬性,可以通過數據庫計算出來,您需要使用SELECT [...] AS virtual attribute_name來定義該屬性。 Here,herehere是一個話題。

如果您的模型中有更復雜的計算方法,則不能使用CActiveDataprovider。最好的辦法是使用可以使用虛擬屬性的CArrayDataprovider。我很抱歉,目前我找不到一個好例子。

請注意,CArrayDataprovider有點不適用,所以您最好儘可能避免它,並儘可能將該虛擬屬性的計算放在sql的CDbCriteria中。