Doctor DQL,类表继承和对子类字段的访问

问题描述 投票:18回答:5

我对DQL查询和实体专门化有疑问。

我有一个称为Auction的实体,它与OneToOne之间具有Item关系。 ItemmappedSuperclassFilmBook。我需要一个可以支持搜索引擎的查询,使用户可以查找具有不同属性AND的拍卖,出售具有不同属性的商品(正是AND部分使其具有挑战性)。

问题是,即使Auction本身具有指向Item的关联,我仍需要访问Film-和Book特定字段。用户将指定他们要查找的Item类型,但是除了在我的DQL查询中使用INSTANCE OF外,我看不到任何使用此信息的方法。

到目前为止,我已经尝试使用类似的查询:

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 ...

但是我认为教义要求我在SELECTFROM语句中引用同一实体。

如果这很重要,我正在使用类表继承。不过,我认为切换到单表继承不会成功。

有什么想法吗?

我对DQL查询和实体专门化有疑问。我有一个名为Auction的实体,它与Item具有OneToOne关系。 Item是Film and Book的mapedSuperclass。我需要一个查询...

php inheritance doctrine-orm doctrine dql
5个回答
10
投票

如马特所说,这是教义项目无法解决的老问题(DDC-16


4
投票

已更新:


2
投票

您可以通过使用id将基本实体与继承类左连接,轻松解决此问题:


2
投票

教义团队表示,他们不会为此增加支持:


0
投票

我遇到了同样的问题,没有为每个子类使用单独的查询并稍后在应用程序级别将它们合并,就找不到解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.