如何使用 Doctrine 获取最常用的标签?
how to get the most used tags with Doctrine?
我有两个实体,"Pin" 和 "Tag",具有多对多关系。
我想获取最常用于以表格形式显示的标签列表
这里是我的存储库,方法是:
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 中,我使用此方法创建一个实体类型:
$builder->add( 'listeTagsDansListeEpingles', 'entity', array(
'class' => 'SharincookRecipesBundle:Tag',
'required' =>false,
'multiple' => true,
'property' => 'libelle',
'expanded'=>true,
'query_builder' => function(TagRepository $repo){
return $repo->findPopularTag();
},
));
但我有一个错误:
预期参数类型 "object or array","string" 给定
在 vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php 的第 224 行
您可以在查询构建器中使用左联接和排序方式
$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();
我有两个实体,"Pin" 和 "Tag",具有多对多关系。 我想获取最常用于以表格形式显示的标签列表
这里是我的存储库,方法是:
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 中,我使用此方法创建一个实体类型:
$builder->add( 'listeTagsDansListeEpingles', 'entity', array(
'class' => 'SharincookRecipesBundle:Tag',
'required' =>false,
'multiple' => true,
'property' => 'libelle',
'expanded'=>true,
'query_builder' => function(TagRepository $repo){
return $repo->findPopularTag();
},
));
但我有一个错误: 预期参数类型 "object or array","string" 给定 在 vendor/symfony/symfony/src/Symfony/Component/PropertyAccess/PropertyAccessor.php 的第 224 行
您可以在查询构建器中使用左联接和排序方式
$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();