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