Я ищу чистый способ изменить порядок Коллекция Doctrine_Collection. Я знаю, это звучит странно, поэтому позвольте мне объяснить мою (простую) цель: мне нужно отобразить x последнюю/новейшуюзапись, но я должен отобразить ее в обратном порядке: самая старая первая и т.д.
Если непонятно, вот пример: Допустим, у меня есть это в моей таблице (давайте назовем это «примером»):
id date
1 2012-01-21
2 2012-03-19
3 2012-02-21
4 2012-03-21
До сих пор я сделал это:
Doctrine::getTable('Example')->createQuery('d')
->orderBy('date DESC')
->limit(3);
Что возвращает это
id date
4 2012-03-21
2 2012-03-19
3 2012-02-21
Но я хочу это:
id date
3 2012-02-21
2 2012-03-19
4 2012-03-21
Изменить:
Я нашел решение этой проблемы, используя промежуточный массив и используя для него array_reverse. Но это выглядит не очень хорошо :(
Вот код, который я написал:
$query = Doctrine::getTable('Example')
->createQuery('e')
->orderBy('date DESC')
->limit(3)
$collection = $query->execute();
//Here is the dirty hack:
$itemArray = array();
foreach ($collection as $item) {
$itemArray[] = $item;
}
$itemArray = array_reverse($itemArray);
$orderedCollection = new Doctrine_Collection($doctrineClass);
foreach($itemArray as $item) {
$orderedCollection->add($item);
}
//OrderedCollection is OK but... come on! There must be a cleaner way to do it
Редактировать 2: ответ от @Adam Kiss
$query = Doctrine::getTable('Example')
->createQuery('e')
->orderBy('date DESC')
->limit(3)
$collection = $query->execute();
//Here is the **lovely** hack:
$orderedCollection = new Doctrine_Collection('Example');
for ($i=($collection->count() - 1); $i>=0;$i--) {
$orderedCollection->add($collection->get($i));
}