原则:使用具有多表继承的子类的字段查询父类


Doctrine: querying parent class using fields of descendant classes with multiple table inheritance

我有一个使用多表继承的用户类层次结构。对于特定的网格,我需要按用户名进行筛选,不同的子类对用户名的表示方式不同。

换句话说,我需要构建这样一个DQL查询:

SELECT u FROM User u WHERE
(u INSTANCEOF CustomerUser
    AND CONCAT ((CustomerUser)u.firstName, ' ', (CustomerUser)u.lastName)
        LIKE :searchString)
OR (u INSTANCEOF InternalUser AND (InternalUser)u.name LIKE :searchString)

像这样的类型转换在Doctrine中是否可行,或者是构建本地查询的唯一方法?

提前谢谢。

与其说是解决确切问题的方法,不如说是在父级添加displayName属性是简化查询并加快查询速度的解决方案。在子类的firstName、lastName和name的setter中,添加一些代码以根据需要进行更新。然后您将能够:

SELECT u FROM User u WHERE displayName LIKE :searchString