2013-04-11 3 views
0

У меня есть массив сущностей, и я хочу сортировать его в зависимости от одного атрибута этого объекта. Я видел, что функция, подобная sort(), определена в php, но я хочу добавить элемент, на основе которого будет проведено сравнение. есть идеи???сортировать массив объектов symfony2

$qb->select('a') 
    ->from('TelnOperatorBundle:Subnumber', 'a') 
    ->where('a.numberrange = :id') 
    ->setParameter('id', $id); 

//$entites=$qb->getQuery() 
      // ->getResult(); 
$entites = $qb->getQuery()->getResult(); 
asort($entites); 
//var_dump($entites); 


foreach($entites as $entite) 
{ 
    //$entite est une instance d'Article pour notre exemple 
    echo($entite->getId()); 
} 
+2

Почему бы вам просто не добавить orderBy() к вашему запросу? –

+0

@AhmedSiouani Я попробовал orderBy, и он работает для целочисленного атрибута, но я хочу сделать сортировку по атрибуту string. Это возможно? – user2269869

+0

Да, это возможно. Вам не нужно CAST, если тип столбца определен корректно. –

ответ

1

Если нет никаких оснований, что вам нужно оон упорядоченного массива и ваша организация занимается Доктриной вы можете просто использовать этот код в контроллере:

$this->getDoctrine()->getRepository('TelnOperatorBundle:Subnumber')->findBy(
    array('numberrange' => $id), 
    array('numberrange' => 'asc') 
); 

Первый массив содержит значение для пункт WHERE, а второй - значения для ORDER BY.


Если вы хотите создать собственный запрос - используется в качестве хранилища для примера - просто добавьте:

[…] 
->where('a.numberrange = :id') 
->addOrderBy('a.numberrange', 'desc') 
[…] 

к вашему запросу.


В обоих случаях результат сортируется по вашей базе данных. Поэтому нет необходимости делать это самостоятельно.

+0

Я хочу добавить его в конструктор запросов. Я думаю, что это более уместно, но должно ли это быть после -> где -> setParameter? другой вопрос: атрибут, по которому я хочу сортировать, - это строка чисел типа «060015000», это проблема? – user2269869

+0

Вы можете разместить его после 'where()' или до него - обе нотации будут работать. Я не думаю, что это проблема для сравнения этих строк. – insertusernamehere

+0

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

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