2013-02-13 5 views
3

Я хочу, чтобы эта команда Sql преобразуется в формат yii cactivedataprovider, так что я могу подавать dataprovider с этими критериями.Как преобразовать этот запрос в запрос 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

+0

Мне строго нужен CActiveDataProvider, поскольку он будет передан виджету. – user1532043

ответ

3

Ваш комментарий о нуждающихся в ActiveDataProvider, вероятно, не соответствует действительности, большинство Yii виджетов просто необходим экземпляр CDataProvider который как SQLDataProvider и ActiveDataProvider являются. Если вы действительно нужны активные модели записи, хотя, вы можете выбрать активные модели записи с помощью SQL с:

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

И затем использовать их в качестве поставщика данных, как это:

$data = CArrayDataProvider($models); 
+0

$ sql будет сырой командой mysql, которую я только что дал? – user1532043

+0

Да, он будет анализировать результаты в моделях ActiveRecord. – Paystey

Смежные вопросы