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