超类的WHERE语句中的子类属性

时间:2012-08-16 15:47:37

标签: sql symfony doctrine-orm dql symfony-2.1

我对我的symfony2项目数据库中的某些表使用class table inheritance。我有一些关系表与我的超类的外键。

现在我想编写一个从我的关系表开始并加入超类的查询。如果我想将记录过滤到子类,我只需要写这个:

SELECT r, c
FROM
BasicBundle:RelationEntity r
JOIN r.superclassId c
WHERE
c INSTANCE OF BasicBundle:Subclass

我的问题是我还想设置一个带有子类属性的WHERE子句,如下所示:

WHERE
c INSTANCE OF BasicBundle:Subclass
AND
c.subclassAttribute LIKE %example%

这不起作用。我做了一些研究并发现了this article,但每次我在查询中尝试使用“CAST”时都会出错。所以似乎CAST不可用。

有没有人知道如何在超类查询的WHERE语句中使用子类属性?

1 个答案:

答案 0 :(得分:0)

为什么不尝试使用子查询?

E.g:

WHERE
c INSTANCE OF BasicBundle:Subclass
AND EXISTS 
  (SELECT x FROM BasicBundle:Subclass s 
   WHERE s.id = c.id AND s.subclassAttribute LIKE %example%)

也许我对实例做错了,但说实话,你没有提供一个非常详细的例子。