How to write a DQL select statement to search some, but not all the entities in a single table inheritance table

前端 未结 3 635
野的像风
野的像风 2021-02-01 08:16

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条回答
  • 2021-02-01 08:53

    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.

    0 讨论(0)
  • 2021-02-01 09:08

    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'])
    ;
    
    0 讨论(0)
  • 2021-02-01 09:10

    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) . "')");
    
    0 讨论(0)
提交回复
热议问题