2016-03-14 42 views
2

鑑於已經存在類別的持久對象。如何一個重複使用在新的對象一個一對多的關係,現有的類別時,只有cateories的ID是已知的在Doctrine中使用外鍵的現有數據庫條目

/** @Entity() */ 
class Category { 
    /** 
    * @var string 
    * @\Doctrine\ORM\Mapping\Column(type="string") 
    */ 
    private $name; 
    /** @var string 
    * @\Doctrine\ORM\Mapping\Id() 
    * @\Doctrine\ORM\Mapping\Column(type="string") 
    */ 
    private $id; 

    /** 
    * Category constructor. 
    * @param string $name 
    * @param string $id 
    */ 
    public function __construct($name, $id) 
    { 
     $this->name = $name; 
     $this->id = $id; 
    } 

    /** 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * @return string 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
} 

現在我可以說,兩大類ID = 1 - >小說和id = 2 - >英文書。 現在我知道類別的ID,並希望將我的Book對象中的一對多關係保存起來。

/** @Entity() */ 
class Book { 
    /** @var mixed 
    * @\Doctrine\ORM\Mapping\OneToMany() 
    */ 
    private $categories; 
    /** @var string */ 
    private $title; 

    /** 
    * Book constructor. 
    * @param mixed $categories 
    * @param string $title 
    */ 
    public function __construct($categories, $title) 
    { 
     $this->categories = $categories; 
     $this->title  = $title; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCategories() 
    { 
     return $this->categories; 
    } 

    /** 
    * @return string 
    */ 
    public function getTitle() 
    { 
     return $this->title; 
    } 
} 

是否有可能創建和手引用堅持一本書對象的現有和已持久化的對象從中我也只知道ID?

回答

2

你不能沒有至少檢索Reference代理實現這一目標:

$categoriesRefs = ['english' => 1, 'fiction' => 2]; 
$categories = []; 

foreach($categoriesRefs as $ref){ 
    $categories[] = $em->getReference('Namespace\Entity\Category', $ref)); 
} 

$book = new Book($categories, 'title'); 

$em->persist($book); 
$em->flush(); 

您可以存儲類不獲取整個類別的對象。
查看更多about reference proxy