2012-04-26 90 views
0

我的代碼:這是一個學說2.2外鍵錯誤?

 $item = new Entity\Item(); 

     $item->setAccountId($account["id"]); 
     $item->setCategory((string)$data->category); 
     $item->setRegion((string)$data->region); 
     $item->setFlag(0); 
     $item->setRank(0); 
     $item->setPhone(""); 
     $item->setEmail(""); 
     $item->setURL((string)$data->url); 
     $item->setTags($tags); 

     //var_dump($item); 
     //die(); 

     $this->em->persist($item); 
     $this->em->flush(); 
     $this->em->clear(); 

註釋關係:

///////////////////////////////////////////////////////////////////////// 
// Relations              // 
///////////////////////////////////////////////////////////////////////// 

/** 
* @ManyToOne(targetEntity="Account", inversedBy="items") 
* @JoinColumn(name="account_id", referencedColumnName="id") 
*/ 
private $account; 

///////////////////////////////////////////////////////////////////////// 
// ForeingKey               // 
///////////////////////////////////////////////////////////////////////// 

/** 
* @Column(type="integer") 
*/ 
protected $account_id; 

如果我使用舊的學說(2.0)的代碼工作,如果我設置爲2.2,代碼拋出此異常:

SQLSTATE [23000]:完整性約束違規:1048列 'ACCOUNT_ID' 不能爲空

在2.2我需要使用Parent實體插入一個Chield實體?

+0

你確定'$ account [「id」]'不爲空嗎? – 2012-04-26 12:27:37

回答

0

從Doctrine2的角度來看,你的對象應該形成一個對象圖,其中外鍵都沒有的地方。正因爲如此,我覺得很奇怪,你

  • 有attribute_id屬性,它是一個外鍵
  • 說,它在2.0

工作我不知道它是如何在2.0,但我不記得在屬性中有相關對象的ID。

因此,您應該放棄$ account_id屬性,並使用$ item-> setAccount($ account),其中$ account是類Account的對象,以便Doctrine正確處理關係。

您也可以嘗試讓學說爲您生成實體骨架用命令:

php doctrine.php orm:generate-entities /tmp/entites 

並檢查在/ tmp /實體生成的文件,你會看到應該是什麼樣子。