2013-04-11 60 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

为什么你不只是添加一个排序依据()来查询? – 2013-04-11 14:34:52

+0

@AhmedSiouani我尝试了orderBy,它适用于整数属性,但我想对字符串属性进行排序。那可能吗? – user2269869 2013-04-11 15:01:54

+0

是的,这是可能的。如果您的列类型定义良好,则不需要CAST。 – 2013-04-11 15:09:31

回答

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

我想将其添加到查询生成器。我认为它更合适,但应该在 - > where - > setParameter之后?另一个问题:我想排序的属性是一串像这样的数字'060015000',这是一个问题吗? – user2269869 2013-04-11 14:52:03

+0

你可以把它放在'where()'之后或之前 - 这两个记号都可以工作。我不认为比较这些字符串是个问题。 – insertusernamehere 2013-04-11 15:04:59

+0

是的,我尝试过,现在它的工作原理,但问题是,我的属性将作出排序是一个字符串。那可能吗? – user2269869 2013-04-11 15:06:48