Doctrine orm 添加数据库中已存在多对一关联和反向边的实体

Doctrine orm 添加数据库中已存在多对一关联和反向边的实体,doctrine-orm,zend-framework2,many-to-one,Doctrine Orm,Zend Framework2,Many To One,将条令2与Zend框架2结合使用。我一直在思考如何持久化一个实体,该实体的字段与数据库中已经存在的另一个实体有多对一的关联。我必须首先从数据库中获取反向端,然后将其添加到拥有的实体中,然后再持久化到数据库中,如下面的代码所示 //$data = $_POST; $book = new Book(); $author = $em->getRepository('Application\Entity\Book')->find($data['author_id']); $book->

将条令2与Zend框架2结合使用。我一直在思考如何持久化一个实体,该实体的字段与数据库中已经存在的另一个实体有多对一的关联。我必须首先从数据库中获取反向端,然后将其添加到拥有的实体中,然后再持久化到数据库中,如下面的代码所示

//$data = $_POST;
$book = new Book();
$author = $em->getRepository('Application\Entity\Book')->find($data['author_id']);

$book->setTitle($data['title'])
    ->setISBN($data['title'])
    ->setAbstract($data['abstract'])
    ->setYear($data['year'])
    ->setAuthor($author);

$em->persist($book);
    $em->flush();
通常,在不使用条令的情况下,我所要做的就是更新上述
书籍
实体的
作者id
字段,并保存到数据库中。但是现在我必须访问数据库,获取作者的详细信息,以创建实体,从而创建关联,然后保存

是应该这样做,还是有另一种方法不需要获取作者的详细信息。

如您所知

方法EntityManager#getReference($entityName,$identifier)允许 获取对标识符已知的实体的引用, 不从数据库加载该实体。这是有用的,因为 例如,作为性能增强,当您想要建立 与具有标识符的实体的关联

您可以简单地执行以下操作:

$book = new Book(); 
$book->setAuthor( $em->getReference('Application\Entity\Author',$data['author_id']));

非常感谢。你救了一条命。