2013-07-23 19 views
5

ben Okulu denilen bir varlık, buSymfony2'nin querybuilder orderby sayımı 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; 
} 

Şimdi bir createQueryBuilder yazmak istiyorum "yöntemleri" Bir ManyToMany ilişkisi olduğunu de sayısı "yöntemleri"

Something tarafından emir gibi:

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

Ama bu işe yaramadı ... kimsenin daha iyi bir fikri var mı?

cevap

12

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

DÜZENLEMEYİ katılmak eklemeyi deneyin.

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

çalışmıyor ... benim hata: Hata: [Dizimi Hatası] hat 0, 106 col, on line '(' var dize sonu bekleniyor diyor COUNT ( –

+0

düzenlemek benim Başka bir deneme yap –

+0

Evet, iyi çalışıyor! Teşekkürler! ama şimdi okul varlığının ve nMethods'ın 2 boyutlu bir dizisini aldım. Sadece kendi içindeki okulla bir foreach döngüsünde yeni bir dizi oluşturuyorum, ya da Daha iyi bir yol var: –