У меня проблема с DQL-запросом и специализацией.
У меня есть Entity, называемый 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 требует, чтобы я ссылался на ту же Entity в операторах SELECT
и FROM
.
Если это важно, я использую наследование таблицы классов. Тем не менее, я не думаю, что переход на одно наследование таблицы может сделать трюк.
Любые идеи?