【问题标题】:how to remove references in doctrine odm object如何删除学说 odm 对象中的引用
【发布时间】:2015-12-22 05:39:07
【问题描述】:

问题是这样的,我有两个文件“学生”和“学校”,在学生中,有一个对学校的字段引用:

/**
 * @MongoDB\ReferenceOne(targetDocument="school")
 */
protected $school;

并且有一个学生对象,其中学校字段引用了一个学校对象,我想删除这个引用,在教义odm documentation 的文档中说我可以只做 $student->setSchool(null),但是当我这样做时,我得到了一个错误

可捕获的致命错误:传递给 Student::setSchool() 的参数 1 必须是 School 的实例,给定 null,

有人知道吗?我误解了文档还是这是另一种情况?谢谢!

【问题讨论】:

  • 如果您的 setter 方法接受 null 作为参数,例如 setSchool(School $school = null) 并且您的外键列也可以为空,则设置 null 将起作用。跨度>
  • @Artamiel 谢谢!这很好地解决了我的问题,如果这是一个答案,我会接受。但是,文档中提到了可空性:“为此选项指定 true 以强制 ODM 在数据库中存储空值而不是取消设置字段。”,我的意图是取消设置字段,所以我就离开它是默认的
  • 是的,你也有道理,因为我对ORM 的经验最多,而不是ODM,所以往往会有一些差异。我可以将我的评论与您的​​评论合并为一个答案。

标签: mongodb symfony doctrine-orm


【解决方案1】:

正如我的评论中所述,为了存储一个可为空的值, 通常需要该字段接受 null 作为值以及传递给 setter 方法的参数(如果添加)接受null。正如@OP 添加的那样,对于ODM 文档,还有其他需要考虑的事项:

nullable - 默认情况下,如果 PHP 值为 null,ODM 将 $unset MongoDB 中的字段。将此选项指定为 true 以强制 ODM 在数据库中存储空值,而不是取消设置字段。

文档中提供的报价参考 - @Field

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多