Doctrine 2.查询构建器。关联INSTANCE OF类型

时间:2015-07-09 23:27:09

标签: doctrine-orm dql instanceof

我在DQL上有以下请求,使用Doctrine 2 Query Builder,效果很好:

$qb->select('post')
    ->from('Posts\Entity\Post','post')
    ->join('post.author','author')
    ->where('author INSTANCE OF :utype')
    ->setParameter('utype',$userType);

但是,考虑到这个例子反映了大型查询的一部分,我想摆脱这个join。我试过这个:

$qb->select('post')
    ->from('Posts\Entity\Post','post')        
    ->where('post.author INSTANCE OF :utype')
    ->setParameter('utype',$userType);

但它不起作用。

如何避免使用join?或者可能有其他方法来优化此类查询?

感谢的

1 个答案:

答案 0 :(得分:1)

我知道这是一个古老的问题,但是答案仍然缺失。
实例名称不能通过参数设置为字符串。

它可以这样写:

$qb->select('post')
    ->from('Posts\Entity\Post','post')        
    ->where('post.author INSTANCE OF '.UserType::class);

或类似的

$qb->select('post')
    ->from('Posts\Entity\Post','post')        
    ->where('post.author INSTANCE OF :utype')
    ->setParameter('utype', $entityManager->getClassMetadata(UserType::class));

@see:https://github.com/doctrine/orm/issues/6483