How to write a DQL select statement to search some

2019-03-09 12:32发布

So I have 3 entities within one table. I need to be able to search 2 out of the 3 entities in one select statement, but I'm not sure how to do this.

3条回答
我想做一个坏孩纸
2楼-- · 2019-03-09 13:15

Use the INSTANCE OF operator in your dql query like this (where User is your base class):

$em->createQuery('
    SELECT u 
    FROM Entity\User u 
    WHERE (u INSTANCE OF Entity\Manager OR u INSTANCE OF Entity\Customer)
');

Doctrine translates this in the sql query in a WHERE user.type = '...' condition.

See here for more details on the dql query syntax.

查看更多
老娘就宠你
3楼-- · 2019-03-09 13:15

As commented by flu, if you want to retrieve some entities from different instances with a QueryBuilder instead of a DQL query, you can use an array as parameter:

$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'])
;
查看更多
The star\"
4楼-- · 2019-03-09 13:23

The answer for multiple instances actually doesn't work. You would have to do something like this to check for multiple instances.

$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) . "')");
查看更多
登录 后发表回答