查询构建器中的DQL



我已经有一些DQL问题工作了。

在我的模型中,y有2个实体(机器和实例(。是一个一对多的关系,因此机器可以有很多实例,一个实例只能拥有1台机器。

现在,我想获取所有具有一些实例的机器。在正常的dql中,我像这样正确工作:

$ids = array(...)
$dql = "select M from AppBundle:Machine M INNER JOIN AppBundle:Instancia I WITH M.id = I.machine WHERE I.software IN (:ids)";
$query = $em->createQuery($dql)->setParameter('ids', $ids);
$maquinas = $query->getResult();

但是当我想翻译QueryBuilder时,我不会让它工作。我正在扭转一些方式:

//First way
$qb = $this->createQueryBuilder("M")
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine')
->where('I.software IN (:ids)')
->setParameters('ids', $ids);       
$maquinas = $qb->getQuery()->getResult();
//Second way
$qb = $this->createQueryBuilder("x")
->select('M')
->from('AppBundle:Machine', 'M')
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine')
->where('I.software IN (:ids)')
->setParameters('ids', $ids);       
$maquinas = $qb->getQuery()->getResult();

我的错是什么?

哪种方式更快,简单的DQL或QueryBuilder ??

非常感谢!

使用表达式:

$qb = $this->createQueryBuilder("M")
->innerJoin('Instancia', 'I', 'WITH', 'M.id = I.machine')
->where($qb->expr()->in('I.software', $ids));  
$maquinas = $qb->getQuery()->getResult();

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/query-builder.html#the-expr-class-class-class-class-class

相关内容

  • 没有找到相关文章