【问题标题】:Doctrine optional OneToOne mappingDoctrine 可选的 OneToOne 映射
【发布时间】:2011-10-15 17:55:21
【问题描述】:

我正在尝试在 Doctrine 中创建一个可选的 OneToOne 映射。

我有一个包含所有可用城市和邮政编码的表格(此表格不应更改),我有一个包含地址和映射城市的表格。但有时我不想在一开始就将城市添加到我的地址中(也许稍后会添加)。但是当我不向地址添加城市时,地址上的持久性会给我一个反射异常,因为没有像 'null' 这样的对象,它应该是 de City 对象。

我不想每次都在数据库中添加一个空城市,因为城市表中不应该添加或删除任何内容。

有什么建议吗?或者我错过了什么?

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

我考虑过的可能解决方案:

  • 在数据库中创建一个空的城市对象并将其始终分配给新创建的地址对象(可能会导致大量开销)
  • 创建与城市数组的 ManyToMany 关系,因此可以添加零个或多个城市(我可以在我的 Address 对象中限制多个城市)但是我需要一个映射表...

【问题讨论】:

    标签: orm doctrine mapping one-to-one


    【解决方案1】:

    只需将nullable=true 添加到@JoinColumn 注释

    【讨论】:

    • 任何方法都可以使这个工作用于多列连接(即@JoinColumns)。我试过了,但没有任何运气......
    • 不幸的是,它生成带有空参数的 INSERT INTO 查询并导致错误:'INSERT INTO message_conversation (title, lastMessage_id) VALUES (?, ?)' with params [43] - 第二个参数(一对一)丢失。
    • 它对我不起作用。我添加了 nullable=true 但没有成功。无论如何,是否可以将一对一的关系作为可选的?
    猜你喜欢
    • 1970-01-01
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多