@Vampiro

как в Doctrine 2 сделать self join без указания явных связей?

Есть абстрактная сущность. Например, новость. При каждом редактировании мы создаем в БД новую новость с неким номером, другим текстом и новой датой. Пускай для этого у нас есть три поля. (id,newsId,text,date).
без id нам никуда, но это не важно. Все это замечательно работает.

А теперь мне нужно сделать выборку такого плана:
em->createQuery("select news1, news2 from
testBundle\Entity\news news1
left join
testBundle\Entity\news news2
on (news1.newsId=news2 .newsId)
where news1.date ='today' and news2.date ='1 day ago')
->setMaxResults(10)
->getResult();


Воооот… то есть с выдернуть две новости с одинаковыми ИД, но с последовательными датами. Естественно, поскольку связь между новостями не описана в модели ORM, Конструктор запросов ругается.
"Identification Variable testBundle\Entity\news used in join path expression but was not defined before."(с)

Курю пока что Versionable, но переделывать то, что уже есть не хочется. SQL-запрос составлен, но как его «затискать» в ORM, не могу придумать.

ЧЯДНТ?
  • Вопрос задан
  • 3809 просмотров
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Буквально сегодня занимался примерно тем же. Это возможно. Решений проблемы несколько. Можно пострадать с DQL а можно написать через Native SQL. Второй вариант работает всегда, но вам придется описать и мэппинг результатов (дело не хитрое, но утомляет).

Хотя в вашем случае было бы логичнее использовать какое-либо расширение для версионизации сущьностей.
Ответ написан
@serjoga
Так опишите связь таблицы саму на себя, дайте какой-то alias для связи чтобы понятно было. Я так делал в Doctrine 1.2 для таблиц типа ID-ParentID.

Непонятно, конечно, как может быть 2 новости с одинаковым ID и разными датами?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы