2015-04-29 69 views
1

我有兩個實體,「Pin」和「Tag」,具有ManyToMany關係。 我想大多數用於獲取的標籤順序列表的形式顯示如何使用Doctrine獲得最常用的標籤?

這裏我用的方法庫:

public function findPopularTag(){ 
    return $qb = $this->createQueryBuilder('t') 
    ->addSelect('COUNT(DISTINCT p.id) AS total_pins') 
    ->leftJoin('t.listeEpingles', 'p') 
    ->groupBy('t.id') 
    ->orderBy('total_pins','DESC'); 


} 
我buildForm

我用這個方法來創建的EntityType:

  $builder->add( 'listeTagsDansListeEpingles', 'entity', array(
       'class' => 'SharincookRecipesBundle:Tag', 
       'required' =>false, 
       'multiple' => true, 
       'property' => 'libelle', 
       'expanded'=>true, 
       'query_builder' => function(TagRepository $repo){ 
        return $repo->findPopularTag(); 
       }, 


     )); 

但我有一個錯誤: 預期類型的​​參數在供應商指定 「對象或數組」,「字符串」/s的ymfony/symfony中/ src目錄/ Symfony的/分量/ PropertyAccess/PropertyAccessor.php在行224

+0

有你加入' - > getQuery( ) - >'orderBy()'後面的getResult()'?在你的示例代碼中,這是缺少 –

+0

我不能這樣做,因爲我必須在我的buildForm中得到一個queryBuilder。 – sepointes

+0

嘗試這一個' - > addSelect('COUNT(DISTINCT p.id)AS HIDDEN total_pins')'這樣ORM將不會在結果集 –

回答

1

您可以使用左連接和秩序在你的查詢生成器

$tag = $em->getRepository('NamespaceYourBundle:Tag'); 
$qb = $tag->createQueryBuilder('t') 
     ->addSelect('COUNT(DISTINCT p.id) AS HIDDEN total_pins') 
     ->leftJoin('t.pins', 'p'); 
     ->groupBy('t.id') 
     ->orderBy('total_pins','DESC') 
     ->getQuery() 
     ->getResult(); 
+0

感謝您的回答,但它返回一個Pin列表,我只想要一個標籤列表。因爲我打電話給一個entityType的buildform方法 – sepointes

+0

@sepointes對不起,我發佈錯誤的答案看到我更新的答案 –

+0

我把你的代碼放在我的倉庫中:'public function findPopularTag(){ \t \t return $ qb = $ this-> createQueryBuilder('t') - > addSelect('COUNT(DISTINCT p.id)AS total_pins') - > leftJoin('t.listeEpingles','p') - > groupBy('t.id ') - > orderBy('total_pins','DESC'); \t}'我把這個方法稱爲我的實體類型,但我有一個錯誤:**期望的參數類型爲「對象或數組」,「字符串」給出** – sepointes

相關問題