2013-10-26 3 views
2

У меня есть массив как это:YII - сортировать DataProvider с массивом

Array 
(
    [54995] => Array 
     (
      [id] => 54995 
      [create_time] => 2012-02-02 20:09:00 
     ) 
    [57349] => Array 
     (
      [id] => 57349 
      [create_time] => 2012-02-09 23:26:00 
     ) 
    [63565] => Array 
     (
      [id] => 63565 
      [create_time] => 2013-10-26 15:55:30 
     ) 
    [63566] => Array 
     (
      [id] => 63566 
      [create_time] => 2013-10-26 15:56:32 
     ) 
) 

и DataProvider что отсортированный по идентификатору.

Я буду сортировать dataProvider с созданием этого массива create_time.

Идентификаторы массива равны с идентификаторами сообщений в dataProvider.

Могу ли я это сделать?

Edit:

У меня есть Ссылка и Tag модель. Я использую dataProvider для связи, но создаю время, хранящееся в таблице тегов.

Tag поля:

  • ID
  • название
  • link_id
  • create_time

Ссылка поля:

  • ID
  • название

Link DataProvider генератор:

$pCriteria = new CDbCriteria(); 
$pCriteria->condition = 'status=:p1'; 
$pCriteria->params = array(':p1' => Lookup::STATUS_PUBLISHED_ALL); 
$pCriteria->addInCondition('id', $pishnahadIds); 
$pLinks = Link::model()->findAll($pCriteria); 

И я не имею никакого отношения к каким-либо причинам.

+2

вы можете предоставить код, который вы используете для создания DataProvider, это может быть просто, как добавить критерий в свой DataProvider –

+0

@JonPaulH спасибо, я добавил больше информации – Chalist

ответ

0

Если я правильно понял ваш вопрос, вы хотите, чтобы возвращаемые данные были заказаны create_time вместо id? Для этого просто используйте CDbCriteria order property.

$pCriteria = new CDbCriteria(); 
// ... 
$pCriteria->with = array('tag'); // Only works with properly setup relationships, otherwise use $pCriteria->join = '...'; 
$pCriteria->order = 'tag.create_time ASC'; // or DESC, whatever you need 
$pLinks = Link::model()->findAll($pCriteria); 

Чтобы исправить информацию о взаимоотношениях, вам необходимо указать отношения в каждой модели. Взгляните на this. Это, надеюсь, даст вам несколько указателей. Короче говоря, каждая модель имеет функцию relations(), которая возвращает массив, описывающий отношения, которые он имеет к другим моделям.

Редактировать

Как по-видимому, мой подход неправилен ... не могли бы вы уточнить описание вашей проблемы мало, chalist? Сейчас я думаю, что вы хотите, чтобы результаты операции Link::model()->findAll() сортировались по create_time. Также откуда взялся исходный массив?

Edit 2

Итак, ссылка и теги разделяют 1: 1 отношения, и вы хотите выход Link отсортированного по времени создания соответствующего тега в?Нужно ли вручную создавать массив, который вы описываете? Вам это нужно за пределами предлагаемой сортировки ссылок?

+0

Обслуживай название и описание чувак – Chalist

+0

идентификатор массива находится в ссылке таблица и время создания находятся в таблице тегов. Я создаю массив вручную – Chalist

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