Doctrine DQL, наследование таблиц классов и доступ к полям подклассов

У меня проблема с запросом DQL и специализацией сущностей.

У меня есть объект под названием Аукцион , который является отношением OneToOne к объекту . Элемент является отображенным суперклассом для 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 ...". 

Такой запрос приводит к ошибке:

Class Entities \ Item не имеет поля или ассоциации с именем bookTypes

, что неверно для книги , но верно для элемента .

Я также пробовал

SELECT a FROM Entities\Book i 
    INNER JOIN i.auction a ...

, но считаю, что Доктрина требует, чтобы я ссылался на одну и ту же Сущность в операторах SELECT и FROM .

Если это важно, я использую наследование таблиц классов. Тем не менее, я не думаю, что переход к наследованию одной таблицы поможет.

Есть идеи?

18
задан Wilt 9 March 2015 в 14:56
поделиться