У меня проблема с DQL-запросом и специализацией сущностей.
У меня есть сущность с именем Auction
, которая OneToOne
связана с Item
. Item
- это mappedSuperclass
для Film
и Book
. Мне нужен запрос, который может поддержать поисковую систему, позволяя пользователю искать аукционы с разными свойствами AND
, продающие предметы с разными свойствами (именно часть AND
делает его сложным).
Проблема в том, что, хотя Auction
имеет ассоциацию, указывающую на Item
как таковую, мне нужно иметь доступ к Film
- и Book
-специфическим полям. Пользователи будут указывать тип Item
, который они ищут, но я не вижу никакого способа использовать эту информацию, кроме использования INSTANCE OF
в моем DQL-запросе.
До сих пор я пытался использовать запрос вроде:
SELECT a FROM Entities\Auction a
INNER JOIN a.item i
INNER JOIN i.bookTypes b
WHERE i INSTANCE OF Entities\Book
AND b.type = 'Fantasy'
AND ...".
Такой запрос приводит к ошибке, говорящей, что:
Класс Entities\Item
не имеет поля или ассоциации с именем bookTypes
, что ложно для Book
, но верно для Item
.
я тоже пробовал
SELECT a FROM Entities\Book i
INNER JOIN i.auction a ...
но я считаю, что Doctrine требует, чтобы я ссылался на одну и ту же сущность в операторах SELECT
и FROM
.
Если это важно, я использую наследование таблиц классов. Тем не менее, я не думаю, что переключение на наследование одной таблицы поможет.
Есть идеи?