Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony/Doctrine:基于关联ID的限制查询,无需加载关联或加入关联_Symfony_Doctrine Orm_Doctrine - Fatal编程技术网

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)
;