2013-02-13 108 views
3

我希望這個Sql命令轉換成yii cactivedataprovider格式,這樣我就可以用這個標準來提供數據提供者。如何將此查詢轉換爲yii查詢?

SELECT * 
    FROM (

    SELECT (

    CASE WHEN product_name LIKE '%nokia%' 
    THEN 1 
    ELSE 0 
    END + 
    CASE WHEN product_name LIKE '%lumia%' 
    THEN 1 
    ELSE 0 
    END + 
    CASE WHEN product_name LIKE '%800%' 
    THEN 1 
    ELSE 0 
    END 
    ) AS numMatches, product_name 
    FROM Production 
    ) AS t 
    WHERE numMatches >0 
    ORDER BY numMatches DESC 
+0

您是否嘗試過' CSqlDataProvider' http://www.yiiframework.com/doc/api/1.1/CSqlDataProvider?或者這不是一個選擇? – topher 2013-02-13 07:17:53

+0

我嚴格需要CActiveDataProvider,因爲它將傳遞給小部件。 – user1532043 2013-02-13 07:52:45

回答

3

你約需要一個ActiveDataProvider評論可能是不正確的,最Yii的部件剛需的CDataProvider一個實例,它都的SqlDataProvider和ActiveDataProvider是。如果你真的需要活動記錄模型雖然,你可以通過SQL與選擇的活動記錄模式:

$models = MyModel::model()->findAllBySql($sql); 

,然後用它們在這樣的數據提供者:

$data = CArrayDataProvider($models); 
+0

$ sql將是我剛纔給出的原始mysql命令? – user1532043 2013-02-13 10:08:37

+0

是的,它會將結果解析到ActiveRecord模型中。 – Paystey 2013-02-13 11:12:35