Поле запроса корневого объекта в доктрине (объединенное) наследование таблицы классов

У меня есть объект с именем 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 

Свойства контента:

  • Я бы
  • обновленный
  • ….

Кроме того, у меня есть много разных объектов, которые расширяют Контент.

В моем репозитории ( другого объекта, который не является Контентом и не распространяет Content ) у меня есть довольно сложный запрос, в котором я хочу выбрать «обновленное» поле всех объектов контента (в зависимости от некоторых других не относящихся к делу вещей)

Изменить. Но объект Content соединен с другим объектом с «-> leftJoin (« p.content »,« c ») в этом запросе. То, что я имею в виду, это то, что я в Репозитории совершенно другой Entity, которая имеет отношение к Контенту, поэтому я присоединяюсь к содержанию там с помощью – – leftJoin ('p.content', 'c' ) '(Где p – это Entity, в котором я сейчас находится в репозитории.

Проблема заключается в том, что в этой доктрине запроса объединяется каждый объект Entity, который расширяет Content на таблицу содержимого. Поскольку у меня довольно много сущностей, я получаю ошибку

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

В моем случае мне не нужны все эти объединенные таблицы, потому что информация, в которой я нуждаюсь, содержится только в таблице содержимого.

Есть ли способ запросить таблицу корневых сущностей при использовании конструктора запросов и не писать собственный sql?

Solutions Collecting From Web of "Поле запроса корневого объекта в доктрине (объединенное) наследование таблицы классов"

Да, есть:

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

Это будет запрашивать только корневую сущность

В конце я сам написал все SQL-заявление, потому что, присоединяясь к нескольким сущностям, нет возможности просто присоединиться к их базовому объекту вместо фактического класса наследования.

Редактировать: Поговорили с разработчиком доктрины, написать инструкцию SQL самостоятельно – это путь.