Я ищу чистый способ изменить порядок коллекции 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
Edit:
Я нашел решение для этого, используя промежуточный массив и используя для него 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));
}