2014-01-07 1 views
4

Использование Doctrine 2 с Zend Framework 2. Я думал о том, как я намерен сохранить объект с полем, имеющим ассоциацию Many-To-One с другим объектом, который уже существует в базе данных. Должен ли я сначала получить обратную сторону из базы данных, а затем добавить ее к собственному объекту, прежде чем перейти к базе данных, как в приведенном ниже коде.Добавление сущности с многосвязной ассоциацией и обратной стороной, уже существующей в базе данных

//$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 объекта выше, и сохраняются в базе данных. Но теперь мне нужно совершить поездку в базу данных, чтобы получить данные автора для создания сущности и, следовательно, ассоциации, а затем сохранить ее.

Это так, как это должно быть сделано, или существует другой способ, который не включает в себя получение данных автора.

ответ

3

Как вы можете прочитать here

метод EntityManager # getReference ($ EntityName, $ идентификатор) позволяет вам получить ссылку на сущность, для которой известен идентификатор, без загрузки этого объекта из база данных. Это полезно, например, для , в качестве повышения производительности, когда вы хотите установить связь с сущностью, для которой у вас есть идентификатор.

Вы могли бы просто сделать это:

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

Благодаря кучу. Вы спасли жизнь. – burntblark

+0

И моя жизнь тоже! – tom10271