querybuilder在Doctrine2中为Symfony2加入查询

时间:2016-01-07 12:54:30

标签: php symfony doctrine-orm

有人可以在querybuilder中为我转换此查询吗?

SELECT m.id,n.unitid 
  FROM mappaths m JOIN unitids n on (m.id=n.id) where n.databaseid=1

我正在使用此查询,但它为我提供了mm.unitid的所有值,而我的要求是只获取由test=1变量定义的一个值

    $query=$qb->select('mm.unitid')
      ->from('ApiMapBundle:Mappaths','m')
      ->from('ApiMapBundle:Unitids','mm')
     // ->leftJoin('m','u')
       ->leftJoin('m.refUnitids1','u','WITH','m.id = u')
     //  ->leftJoin('m.refUnitids2','v')   
      ->where('m.id=:test')
      ->setParameter('test',1)
      ->getQuery()->getResult();

1 个答案:

答案 0 :(得分:1)

请尝试以下操作:

$query = $qb->select('mm.unitid')
      ->from('ApiMapBundle:Mappaths','m')
      ->innerJoin('m.refUnitids1','mm','WITH','m.id = mm.FIELD') //you need to specify on which field of mm join should be done
      ->where('m.id=:test')
      ->setParameter('test',1)
      ->getQuery()
      ->getResult();

您需要指定Unitids字段,该字段应用于加入Mappaths。最好的方法是在Entity定义中定义此关系,然后只使用->innerJoin('m.refUnitids1','mm')而无需其他连接参数。

此外,在这种情况下,最好使用innerJoin代替leftJoin

相关问题