Query field of root entity in doctrine (joined) cl

2019-08-05 19:20发布

I have a entity named Content. This is my abstract base class for all my other Content related entities.

/**
* 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

Content properties:

  • id
  • updated
  • ....

Further I have a lot of different entities that all extend Content.

In my repository (of another entity that's not Content and not extending Content) I have a rather complex query where i want to select the "updated" field of all content objects (depending on some other unrelevant stuff)

Edit: But the Content entity is joined onto another entity with "->leftJoin('p.content', 'c')" in that query. What I mean is that I'm in the Repository of a completely different Entity that just has a relation to Content, that's why I'm joining the content onto there with the '->leftJoin('p.content', 'c')' (Where p is the Entity in which Repository I'm currently in.

The problem is, that in that query doctrine is joining every single Entity that extends Content on to the content table. Because I have quite a lot of entities the error I get is

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

In my case I don't need all these joined tables because the info I need is in the Content table alone.

Is there any way to only query the root entity table while still using the querybuilder and not writing my own sql?

2条回答
相关推荐>>
2楼-- · 2019-08-05 19:50

In the end I wrote the whole SQL Statement myself, because while joining multiple entities there is no way just to join their base entity, instead of the actual inheriting class.

Edit: Talked to a developer of doctrine, writing the SQL statement yourself is the way to go.

查看更多
Evening l夕情丶
3楼-- · 2019-08-05 19:56

Yes, there is:

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

This will query only root entity

查看更多
登录 后发表回答