每次我想将一个对象添加到关系中时,我都觉得必须通过 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 不会查询 Person,而是返回具有该 id 的人的引用代理对象。但是,如果您这样做:
$person = $em->getReference("Person", $id); // 0 queries
$person->getId(); // Still 0 queries
$person->getSomeField(); // query fired

如果您尝试获取某些必须从数据库中获取的字段,Doctrine 将触发延迟加载。

请参阅文档 EntityManager::getReference method

关于php - 通过 Id 向学说 ArrayCollection 添加元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24208576/

10-16 23:10