2012-07-18 18 views
2

我想手動設置外鍵ID爲對象的ID,但沒找到怎麼辦呢如何設置一個外鍵ID#SF2#doctrine2

class Item 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="MyBundle\Entity\ItemType", inversedBy="itemTypes") 
    * @ORM\JoinColumn(name="type_id", referencedColumnName="id") 
    */ 
    protected $item_type; 
} 

有一種方式做鏈接的東西?

$item = new Item(); 
$item->setItemTypeId(1); // This generate an error. 

或者我必須這樣做嗎?

$item = new Item(); 
$type = Repository::RetrieveById(1); 
$item->setItemType($type); // This generate an error. 
+2

您可以通過代理參考類 看到這裏集中的關係:http://stackoverflow.com/questions/9308519/doctrine-setting-association-with-id-instead-of-object-instance – jkrnak 2012-10-31 15:36:14

回答

3

這可以使用Reference Proxies,這讓你獲得針對其標識符是已知的實體的引用來完成,而無需從數據庫加載該實體。

$type = $em->getReference('MyBundle\Entity\ItemType', 1); 
$item->setItemType($type); 
0
  1. 首先,(你有沒有在ItemType的類中定義的關係?):

    inversedBy="item" 
    
  2. 所以二:

    Repository::RetrieveById(1); // Not valid code for the repository methods 
    
  3. 替換爲這樣:

    $type = $this->getDoctrine()->getRepository('ACMEBundle:ItemType')->find(1); 
    
  4. 而第二種用法將接近文檔。

+1

所以如果我只是得到一個Id,我必須在DB中獲取對象,我不能只設置關係而不會獲取對象? – 2012-07-18 11:14:24

+0

歡迎來到Doctrine2世界。如果你想使用type_id,你必須在實體類中編寫一個setter和getter。 – 2012-07-18 11:21:14

+2

嗨,使用id和關係工作正常,直到教條2.2。現在兩者不再一起工作了......第二個選項的問題是生成了一個額外的查詢。如果你已經有FK,那麼這種查詢的需要是什麼?請讓我知道你的想法。謝謝 – LEM01 2012-09-20 13:41:25