Symfony/Doctrine:基于关联ID的限制查询,无需加载关联或加入关联
假设我有一个多对一关系,涉及一个Symfony/Doctrine:基于关联ID的限制查询,无需加载关联或加入关联,symfony,doctrine-orm,doctrine,Symfony,Doctrine Orm,Doctrine,假设我有一个多对一关系,涉及一个人实体和一个职位实体。外键位于个人实体上。我想编写一个查询,将结果限制为特定职位的人员,而不必将职位关联加入查询或加载职位实体 这不起作用,因为Person实体上没有position\u id属性。相反,我必须首先加入职位协会,并这样做: $qb = $em->createQueryBuilder() ->select('Person') ->from('AcmeBundle:Person', 'Person') ->join(
人
实体和一个职位
实体。外键位于个人
实体上。我想编写一个查询,将结果限制为特定职位的人员,而不必将职位
关联加入查询或加载职位实体
这不起作用,因为Person
实体上没有position\u id
属性。相反,我必须首先加入职位
协会,并这样做:
$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)
;
是否可以在不(1)加入职位关联或(2)加载完整职位对象的情况下,通过职位ID限制我的查询?
。。。
->其中('Person.position\u id=:position\u id')
...
你应该这样做
。。。
->其中('Person.position=:position\u id')
...
Person实体中职位关系的属性名称是什么?“位置”不是吗?你为什么在第一次选择时选择where('Person.position\u id=:position\u id')而不是where('Person.position=:position\u id')?啊,我不知道你能这么做。在本例中,属性的名称实际上是position
,因此我假设必须在原则中使用完整的position
对象。我想我试过了,但我想没有。如果你把它作为一个答案发布,我可以接受。如果你没有选择它,它将不会加载position对象。您可以在关联映射中利用延迟加载特性。
$qb = $em->createQueryBuilder()
->select('Person')
->from('AcmeBundle:Person', 'Person')
->where('Person.position = :position')
->setParameter('position', $loaded_position_object)
;