如何使用Doctrine获取最常用的标签?

时间:2015-04-29 13:46:34

标签: symfony doctrine query-builder

我有两个实体,“Pin”和“Tag”,具有ManyToMany关系。 我想得到一个标签列表,大多数用于以表格形式显示

这里我的存储库使用方法:

    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();
                },


        ));

但我有一个错误: “对象或数组”类型的预期参数,给定的“字符串” vendor / symfony / symfony / src / Symfony / Component / PropertyAccess / PropertyAccessor.php第224行

1 个答案:

答案 0 :(得分: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();