我在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
?或者可能有其他方法来优化此类查询?
感谢的
答案 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));