Php 按Id将元素添加到doctrine ArrayCollection

Php 按Id将元素添加到doctrine ArrayCollection,php,symfony,doctrine-orm,Php,Symfony,Doctrine Orm,每次我想将一个对象添加到关系中时,都必须按id从数据库中获取该对象,这让我感到非常恼火。有没有办法通过id将对象添加到关系中,而不是添加整个对象 这是我的实际代码: ... $person = $em->getRepository("Person")->findOneById($id); $me->getPersons()->add($person); ... 我想要这样的东西: ... $me->getPersons()->add($id); ... 那

每次我想将一个对象添加到关系中时,都必须按id从数据库中获取该对象,这让我感到非常恼火。有没有办法通过id将对象添加到关系中,而不是添加整个对象

这是我的实际代码:

...
$person = $em->getRepository("Person")->findOneById($id);
$me->getPersons()->add($person);
...
我想要这样的东西:

...
$me->getPersons()->add($id);
...

那我就可以省下一次数据库之旅了!我更喜欢它!有可能吗?

实际上你不必这么做。您可以这样获得引用对象:

$person = $em->getReference("Person", $id);
$me->getPersons()->add($person);
Doctrine不会查询
个人
,而是返回具有该id的个人的参考代理对象。但是,如果您这样做:

$person = $em->getReference("Person", $id); // 0 queries
$person->getId(); // Still 0 queries
$person->getSomeField(); // query fired
若您试图获取一些必须从数据库中获取的字段,则条令将触发延迟加载


请参阅文档

您在什么环境下尝试这样做?如果您已经知道要添加的人的ID,这可能意味着您之前加载了person对象,其中$ID变量是请求参数