我正在使用继承与Doctrine 2.1:
Fiche是主要实体 和艺术家来自Fiche
所以:Fiche - >艺术家
然后我在另一个名为Abonnement的存储库中有这个方法:
public function getCountAbonnes(\MyApp\FicheBundle\Entity\Fiche $fiche){
$qb = $this->_em->createQueryBuilder();
$qb->add('select', $qb->expr()->count('abonnement'));
$qb->from('\Teelt\FicheBundle\Entity\Abonnement', 'abonnement');
// !!!! this line is the problem !!!!
$qb->where('fiche', $fiche);
return $qb->getQuery()->getSingleScalarResult();
}
这是Abonnement ORM的定义:
MyApp\FicheBundle\Entity\Abonnement:
type: entity
repositoryClass: MyApp\FicheBundle\Repository\AbonnementRepository
table: abonnement
# many fiche for many users
manyToOne:
user:
targetEntity: MyApp\UserBundle\Entity\User
inversedBy: abonnements
fiche:
targetEntity: MyApp\FicheBundle\Entity\Fiche
inversedBy: abonnements
# etc ...
我在这里遇到的问题是我总是传递Artist实体而不是Fiche,我得到了这个错误:
在此上下文中不允许表达“Teelt \ FicheBundle \ Entity \ Artist”类型。
所以我想我必须从我的艺术家那里取出Fiche ......这听起来很糟糕,因为它是同一个对象!
答案 0 :(得分:1)
感谢您的回答,让我更接近解决方案,
但最后似乎是:
$qb->where($qb->expr()->eq('abonnement.fiche', $fiche->getId() ));
是解决方案。
这是正常的吗?我认为ID的映射是自动的,但如果我不使用getId()它返回我的Fiche的toString()版本并生成:
SELECT COUNT(abonnement)FROM MyAppFicheBundle:Abonnement abonnement abEREment.fiche = Miles Davis
[语法错误]第0行,第100栏:错误:字符串的预期结束,得到'戴维斯'
答案 1 :(得分:0)
$qb->where
接受字符串(DQL)或查询生成器表达式。
在您的情况下,请将行替换为:
$qb->where($qb->expr()->eq('abonnement.fiche', $fiche));
我也会改写这样的开头:
$qb = $this->_em->createQueryBuilder()
->select($qb->expr()->count('abonnement'));
->from('TeeltFicheBundle:Abonnement', 'abonnement')
;