我正在使用教义2.1的继承。
fiche是主实体艺术家源自Fiche
so:fiche->艺术家
然后,我有这个方法,在另一个名为" br悔"的存储库中:
public function getCountAbonnes(MyAppFicheBundleEntityFiche $fiche){
$qb = $this->_em->createQueryBuilder();
$qb->add('select', $qb->expr()->count('abonnement'));
$qb->from('TeeltFicheBundleEntityAbonnement', 'abonnement');
// !!!! this line is the problem !!!!
$qb->where('fiche', $fiche);
return $qb->getQuery()->getSingleScalarResult();
}
这是审判ORM定义:
MyAppFicheBundleEntityAbonnement:
type: entity
repositoryClass: MyAppFicheBundleRepositoryAbonnementRepository
table: abonnement
# many fiche for many users
manyToOne:
user:
targetEntity: MyAppUserBundleEntityUser
inversedBy: abonnements
fiche:
targetEntity: MyAppFicheBundleEntityFiche
inversedBy: abonnements
# etc ...
我在这里遇到的问题是,我总是通过艺术家实体而不是菲奇,而我得到了这个错误:
在这种情况下不允许使用'Teelt fichebundle entity Artist的类型的表达。
所以我想我必须从艺术家那里获取菲奇……这听起来很糟糕,因为它是同一对象!
感谢您的回答,它使我更接近解决方案,
但最后似乎是:
$qb->where($qb->expr()->eq('abonnement.fiche', $fiche->getId() ));
是解决方案。
正常吗?我以为ID的映射将是自动的,但是如果我不使用getId(),它将返回我的fiche的toString()版本,并生成:
从myappfichebundle中选择计数(不受于审判)in thing。
[语法错误]第0行,col 100:错误:弦的预期末端,获得'davis'
$qb->where
接受字符串(dql)或查询构建器表达式。
在您的情况下,由以下方式替换行:
$qb->where($qb->expr()->eq('abonnement.fiche', $fiche));
i也要重写这样的开始:
$qb = $this->_em->createQueryBuilder()
->select($qb->expr()->count('abonnement'));
->from('TeeltFicheBundle:Abonnement', 'abonnement')
;