2011-07-29 125 views
7

我想在Doctrine中創建一個可選的OneToOne映射。學說可選OneToOne映射

我有一個表,其中包含所有城市和郵政編碼(不應更改此表),並且我有一個包含地址和映射城市的表格。但有時我不想在開始時將City添加到我的地址中(可能稍後會發布)。但是當我不向地址添加一個城市時,地址上的堅持給了我一個反射異常,因爲沒有像'null'這樣的對象,它應該是de對象。

我不想每次都在數據庫中添加一個空的城市,因爲不應該在城市表中添加或刪除任何內容。

有什麼建議嗎?或者我錯過了什麼?

class Address{ 
/** 
* @OneToOne(targetEntity="City") 
* @JoinColumn(name="city_id", referencedColumnName="id") 
*/ 
    private $city = ''; 

可能的解決方案,我認爲:

  • 創建數據庫一座空城對象,並始終分配此到新創建的地址對象(可能會造成很大的開銷)
  • 創建ManyToMany與一系列城市的關係,所以可以添加零個或多個城市(我可以限制我的地址對象中的大量城市),但然後我需要一個映射表...

回答

16

只需簡單地添加到nullable=true註釋@JoinColumn

+0

什麼辦法,使這項工作對於多列連接(即@JoinColumns)。 –

+0

不幸的是,它產生了帶有空參數的INSERT INTO查詢並導致錯誤:''INSERT INTO message_conversation(title,lastMessage_id)VALUES(?,?)'with params [43]' - 第二個參數(一對一)缺失。 – Athlan

+0

它不適合我。我添加了nullable = true,但沒有成功。無論如何要做一對一的關係作爲選項? – skonsoft