2013-07-23 4 views
5

मैं स्कूल नामक संस्था, यह "तरीकों" एक ManyToMany संबंध नहींsymfony2 querybuilder orderby गिनती 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; 
} 

अब मैं एक createQueryBuilder लिखना चाहते है कि डी गिनती "तरीकों"

कुछ द्वारा आदेश जैसे:

$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)") 

संपादित करें जोड़ने के लिए प्रयास करें।

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

काम नहीं कर रहा ... मेरी त्रुटि: [विन्यास त्रुटि] लाइन 0, कर्नल 106: त्रुटि: स्ट्रिंग का अंत, मिल गया '(' लाइन पर जहां का कहना है COUNT ( –

+0

संपादित मेरी उत्तर दें। –

+0

हां यह ठीक काम करता है! धन्यवाद! लेकिन अब मुझे स्कूल इकाई और nMethods की 2 आयामी सरणी मिली है। मैं केवल एक इकाई स्कूल के साथ एक फोरच लूप में एक नई सरणी बनाता हूं, या है वहाँ एक बेहतर तरीका है। –

संबंधित मुद्दे