2014-01-07 49 views
4

在Zend Framework中使用Doctrine 2 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(); 

通常情況下,在不使用的學說,都是我所要做的就是更新上述Book實體的author_id領域,堅持到數據庫中。但是現在我必須前往數據庫來獲取作者的詳細信息以創建實體,從而創建關聯,然後堅持。

這是應該完成的方式,還是有另一種方法不涉及獲取作者的細節。

回答

3

正如你可以讀here

的方法的EntityManager#getReference($的entityName,$標識符)讓 你獲得,而不從裝載該實體的量,標識符是已知的實體, 基準數據庫。這對於 示例很有用,因爲您希望與您擁有標識符的實體建立關聯 作爲性能增強。

你可以簡單地這樣做:

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

感謝一大堆。你已經拯救了生命。 – burntblark

+0

而我的生活呢! – tom10271

相關問題