2011-07-29 126 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