在doctrine(已加入)类表继承中查询根实体的字段

时间:2015-04-17 09:28:29

标签: php symfony doctrine-orm doctrine

我有一个名为Content的实体。 这是我所有其他内容相关实体的抽象基类。

/**
* MyBundle\Entity\Content
*
* @ORM\Entity(repositoryClass="MyBundle\Repository\ContentRepository")
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="discr", type="string")
* @ORM\Table(name="MyBundle_content")
* @ORM\HasLifecycleCallbacks
*/
abstract class Content

内容属性:

  • ID
  • 更新
  • ....

此外,我有很多不同的实体都扩展了内容。

在我的存储库中(的另一个实体不是内容而不是扩展内容)我有一个相当复杂的查询,我想选择所有内容对象的“更新”字段(取决于其他一些)不相关的东西)

修改: 但是Content实体在该查询中与“ - > leftJoin('p.content','c')”连接到另一个实体。 我的意思是我在一个完全不同的实体的存储库中,它只与内容有关系,这就是为什么我用' - > leftJoin('p.content','c'加入内容的原因')'(其中p是我目前所在的存储库的实体。

问题是,该查询原则是将每个将内容扩展到内容表的实体加入。 因为我有很多实体,所以我得到的错误是

General error: 1116 Too many tables; MySQL can only use 61 tables in a join

在我的情况下,我不需要所有这些连接表,因为我需要的信息仅在Content表中。

有没有办法只在查询根实体表的同时仍然使用querybuilder而不是编写我自己的sql?

2 个答案:

答案 0 :(得分:0)

是的,有:

$result = $this->em->getRepository('MyBundle:Content')
             ->createQueryBuilder('c')
             ->select('c')
             ->leftJoin('c.Other', 'p')
             ->getQuery()
             ->getArrayResult();

这将仅查询根实体

答案 1 :(得分:0)

最后我自己写了整个SQL语句,因为在加入多个实体时,没有办法加入他们的基本实体,而不是实际的继承类。

编辑:与学说的开发者交谈,自己编写SQL语句是可行的方法。