我有一个使用多表继承的用户类层次结构。对于特定的网格,我需要按用户名进行筛选,不同的子类对用户名的表示方式不同。
换句话说,我需要构建这样一个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