将Doctrine 2与Zend Framework一起使用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();
通常,在不使用原则的情况下,我所要做的就是更新上面author_id
实体的Book
字段并持久保存到数据库。但现在我必须访问数据库以获取作者详细信息以创建实体,从而创建关联然后继续。
这是应该做的方式还是有另一种方式不涉及获取作者的详细信息。
答案 0 :(得分:3)
您可以阅读here
方法EntityManager#getReference($ entityName,$ identifier)允许 您获得对已知标识符的实体的引用, 无需从数据库中加载该实体。这很有用 例如,当您想要建立一个性能增强时 与您拥有标识符的实体的关联。
你可以这样做:
$book = new Book();
$book->setAuthor( $em->getReference('Application\Entity\Author',$data['author_id']));