2013-07-23 10 views
5

Mam podmiot o nazwie szkoły, ma związek ManyToMany "Metody"Symfony2 QueryBuilder orderby Ilość manytomany

class School{ 
/** 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
* @ORM\Column(type="integer") 
*/ 
protected $id; 

/** 
* @ORM\ManyToMany(targetEntity="Method", inversedBy="schools") 
* @ORM\JoinTable(name="lk_access_method") 
* @ORM\OrderBy({"name" = "asc"}) 
*/ 
protected $methods; 
} 

Teraz chcę napisać createQueryBuilder że zamówienia przez De Count "metod"

Something na przykład:

$schools = $this->createQueryBuilder('s') 
      ->select("s") 
      ->orderBy("COUNT(s.methods)") 
      ->addOrderBy("s.name") 
      ->setMaxResults($count) 
      ->setFirstResult($pos) 
      ->getQuery() 
      ->getResult(); 

Ale to nie zadziałało ... ktoś ma lepszy pomysł?

Odpowiedz

12

Spróbuj dodać dołączyć

->join('s.methods', 'm') 
->orderBy("COUNT(m.id)") 

edytować.

->addSelect('COUNT(m.id) as nMethods') 
->join('s.methods', 'm') 
->groupBy('s.id') 
->orderBy("nMethods", 'DESC') 
+0

nie działa ... mój błąd: [Błąd składni] Linia 0 kol 106: Błąd: Oczekiwano końca łańcucha, got '(' na linii, gdzie mówi count ( –

+0

edytować swoje Odpowiedź, spróbuj jeszcze raz –

+0

Tak, to działa dobrze! Dzięki! , ale teraz mam dwuwymiarową tablicę jednostki szkolnej i nMethods Tworzę nową tablicę w pętli foreach z tylko jednostką Szkoła w nim, lub jest istnieje lepszy sposób: –