所以我在一个表中有3个实体。我需要能够在一个select语句中搜索3个实体中的2个,但我不知道该怎么做。
答案 0 :(得分:18)
在你的dql查询中使用INSTANCE OF
运算符(其中User
是你的基类):
$em->createQuery('
SELECT u
FROM Entity\User u
WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');
Doctrine在WHERE user.type = '...'
条件的sql查询中对此进行翻译。
有关dql查询语法的更多详细信息,请参阅here。
答案 1 :(得分:5)
多个实例的答案实际上不起作用。你必须做这样的事情来检查多个实例。
$classes = ['Entity\Manager', 'Entity\Customer'];
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere("u INSTANCE OF ('" . implode("','", $classes) . "')");
答案 2 :(得分:2)
commented作为flu,如果您想使用QueryBuilder而不是DQL查询从不同实例中检索某些实体,则可以使用数组作为参数:
$qb = $this->createQueryBuilder('u');
->where('u.id > 10') //an arbitrary condition, to show it can be combined with multiple instances tests
->andWhere('u INSTANCE OF :classes')
->setParameter('classes', ['Entity\Manager', 'Entity\Customer'])
;