2013-05-20 4 views
3

Я много искал об этом и до сих пор не получил ответа. Вот проблема:
Я создаю объект CDbCriteria, чтобы получить корректные данные:Yii dataProvider порядок данных, заданный массивом

$criteria = new CDbCriteria; 
$criteria->compare('id_post', $arrayContents); 

где $arrayContents представляет собой массив, состоящий из следующих элементов:

Array ([0] => 10 [1] => 16 [2] => 14 [3] => 15) 

Таковы id_posts я хочу представить используя dataProvider, но только в этом конкретном порядке. Далее я создаю DataProvider таким образом:

$dataProviderPosts = new CActiveDataProvider('Posts',array(
      'criteria' => $criteria, 
      'pagination'=>array(
        'pageSize'=>20, 
      ), 
    )); 

Порядок отображения id_posts составляет: 10, 14, 15, 16. Не один, что я хотел.
Я также попытался создать DataProvider так:

$dataProviderPosts = new CActiveDataProvider('Posts',array(
      'criteria'=>$criteria, 
      'sort'=>array(
        'defaultOrder'=>array('id_post'=>$arrayContents), 
      ), 
      'pagination'=>array(
        'pageSize'=>20, 
      ), 
    )); 

Но только не отображая его в таком порядке: 16, 15, 14, 10, так что просто назад, так что не то, что я хотел, потому что я хочу для отображения его по порядку: 10, 16, 14, 15 точно так же, как цифры в $arrayContents.

+0

ну, это не проблема Yii, но db, вот вопрос о сортировке по статьям http://stackoverflow.com/questions/396748/ordering-by-the-order-of-values-in- a-sql-in-clause Однако я не знаю, как применить его к Yii dataprovider. –

+0

Спасибо за ваш ответ. Это дало мне несколько новых идей, но пока никто из них не работал. – user2399760

+0

Добавьте еще одно поле в таблицу 'priority'. Установите приоритет, чтобы отображать данные по вашему выбору. Просто! Возможно, это не решение для вашего ответа, а случайная идея. Это может решить вашу проблему. –

ответ

1

CActiveDataProvider не будет делать то, что вам нужно. Заказ, который он предоставляет, - это просто простой порядок SQL, он должен быть вычислен как комбинация столбцов ASC или DESC.

Заказ, который вы хотите, выглядит как произвольный заказ идентификаторов. Я думаю, у вас нет других столбцов, таких как «позиция» или около того в вашей модели, поэтому вам придется самостоятельно сортировать свои данные.

Я не пробовал, но после API, вы можете использовать GetData()/УстановитьДанных() методов для того, чтобы извлечь данные, сортировать его и установить его обратно в поставщике.

+0

Это сработало! Большое спасибо. Поскольку я опубликовал его, у меня не было много времени, но в конце концов это заняло у меня некоторое время после того, как я понял, как работают эти getData() и setData().Для тех, кто может быть заинтересован в реализации такого рода, как я это сделал: – user2399760

+0

'$ arrayContents2 = $ dataProviderPosts-> getData(); \t \t $ arrayContents3 = $ dataProviderPosts-> getData(); \t \t $ arrayContents4 = $ arrayPhraseInContents; \t \t sort ($ arrayContents4); \t \t $ number = count ($ arrayContents); \t \t для ($ I = 0; $ г <$ число; $ я ++) \t \t { \t \t \t $ ключ = array_search ($ arrayPhraseInContents4 [$ я], $ arrayPhraseInContents); \t \t \t $ arrayPhraseInContents2 [$ key] = $ arrayPhraseInContents3 [$ i]; \t \t} \t \t \t \t \t $ dataProviderPosts-> SetData ($ arrayContents2); ' – user2399760

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