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?
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.
Yes, there is:
This will query only root entity