通过Id将元素添加到doctrine ArrayCollection中

时间:2014-06-13 15:08:27

标签: php symfony doctrine-orm

每次我想将它添加到关系中时,我发现必须通过数据库中的id获取对象非常烦人。有没有办法通过id将对象添加到关系中而不是添加整个对象?

这是我的实际代码:

...
$person = $em->getRepository("Person")->findOneById($id);
$me->getPersons()->add($person);
...

我想有这样的事情:

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

然后我会保存一次数据库之旅!我更喜欢哪个!有可能吗?

1 个答案:

答案 0 :(得分:6)

你实际上不必这样做。您可以像这样获得参考对象:

$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