2013-02-13 109 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