将 Doctrine 2 与 Zend Framework 2 结合使用。一直在考虑我打算如何保留一个具有与数据库中已存在的另一个实体具有多对一关联的字段的实体。我是否必须首先从数据库中获取反向端,然后将其添加到拥有实体,然后再保留到数据库,如下面的代码所示。
//$data = $_POST;
$book = new Book();
$author = $em->getRepository('ApplicationEntityBook')->find($data['author_id']);
$book->setTitle($data['title'])
->setISBN($data['title'])
->setAbstract($data['abstract'])
->setYear($data['year'])
->setAuthor($author);
$em->persist($book);
$em->flush();
通常,在不使用原则的情况下,我所要做的就是更新上面Book
实体的author_id
字段并保存到数据库中。但是现在我必须前往数据库以获取作者详细信息以创建实体,从而关联,然后持久化。
这是应该这样做的方式,还是有另一种不涉及获取作者详细信息的方法。
正如你可以在这里读到的
方法 EntityManager#getReference($entityName, $identifier) 允许 您获得对已知标识符的实体的引用, 无需从数据库加载该实体。这很有用,对于 例如,作为性能增强,当您想要建立 与您具有标识符的实体的关联。
您可以简单地这样做:
$book = new Book();
$book->setAuthor( $em->getReference('ApplicationEntityAuthor',$data['author_id']));