Symfony / Doctrine:基于关联ID限制查询而不加载关联或加入关联

时间:2014-11-11 14:14:22

标签: symfony doctrine-orm doctrine

假设我有一个涉及Person实体和Position实体的多对一关系。外键存在于Person实体上。我想编写一个查询,将结果限制为特定职位的人员,而无需将Position关联加入查询或加载职位实体

$qb = $em->createQueryBuilder()
  ->select('Person')
  ->from('AcmeBundle:Person', 'Person')
  ->where('Person.position_id = :position_id')
  ->setParameter('position_id', 1)
;

这不起作用,因为position_id实体上没有Person属性。相反,我必须首先加入Position关联并执行此操作:

$qb = $em->createQueryBuilder()
  ->select('Person')
  ->from('AcmeBundle:Person', 'Person')
  ->join('Person.position', 'Position')
  ->where('Position.id = :position_id')
  ->setParameter('position_id', 1)
;

或者这个:

$qb = $em->createQueryBuilder()
  ->select('Person')
  ->from('AcmeBundle:Person', 'Person')
  ->where('Person.position = :position')
  ->setParameter('position', $loaded_position_object)
;

是否可以通过位置ID限制我的查询,而不是(1)加入位置关联或(2)加载完整位置对象?

1 个答案:

答案 0 :(得分:1)

而不是这个

...
->where('Person.position_id = :position_id')
...

你应该这样做

...
->where('Person.position = :position_id')
...