Doctrine2 Inheritance and querybuilder



我正在使用教义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')
;

相关内容

  • 没有找到相关文章

最新更新