如何编写DQL select语句来搜索某个表,但不是单个表继承表中的所有实体

时间:2011-09-21 18:21:10

标签: doctrine-orm

所以我在一个表中有3个实体。我需要能够在一个select语句中搜索3个实体中的2个,但我不知道该怎么做。

3 个答案:

答案 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'])
;