2013-07-23 5 views
5

私は学校と呼ばれるエンティティを持っている、それは多対多の関係「メソッド」を持っているSymfony2のquerybuilder orderbyの数多対多

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; 
} 

今、私はド数「メソッド」によって、受注

が何かというcreateQueryBuilderを書きたいですlike:

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

しかし、それはうまくいかなかった...誰かが良いアイデアを持っていますか?

答えて

12

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

EDITに参加追加してみてください。

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

機能していません... 私のエラー:エラー:[構文エラー]行0、106 COL、ライン上の '(' だ文字列の終了予定は言うCOUNT( –

+0

編集を私の答。他には感謝! !正常に動作します –

+0

はいを​​試みるが、今、私は学校のエンティティとnMethodsの2次元配列を得た。 私はそれで唯一のエンティティ学校でforeachループで新しい配列を作る、またはであることを確認してください。 'COUNT(m.id)HIDDEN nMethods'、これは動作します:そこより良い方法 –

関連する問題