【问题标题】:What is discriminator field conflict in PHP Doctrine MongoDB ODM?PHP Doctrine MongoDB ODM 中的鉴别器字段冲突是什么?
【发布时间】:2023-03-31 07:29:01
【问题描述】:

出现错误是什么意思

“y”中的鉴别器字段“x”与映射字段的“name”属性冲突。

被抛出?

更具体地说,我的意思是这种情况:

    if ($this->discriminatorField !== null && $this->discriminatorField === $mapping['name']) {
        throw MappingException::discriminatorFieldConflict($this->name, $this->discriminatorField);
    }

Referal Code

【问题讨论】:

  • 粘贴两个类的注释
  • 好的,我确定可能有多种原因@delboy1978uk,我马上粘贴它们
  • 原来我会从文档中粘贴 Person/SuperUser 示例(单个集合继承)。唯一的区别是没有 Person 扩展的注释的抽象类,但是当我删除该关系时,我仍然得到相同的错误@delboy1978uk
  • @delboy1978uk 我并不完全正确。我有 @String 注释用于将属性映射到鉴别器字段。但是当我发现我花了一些时间去探索。如果有任何字段注解,即使是@String,也会抛出异常。似乎作者想强调鉴别器字段只能有字符串值,但我不能确定,因为文档只说 @String 等于没有属性类型映射,没有例外——多么双关语:)

标签: php mongodb doctrine doctrine-odm


【解决方案1】:

鉴别器字段不应该映射到属性,因此您会看到异常。理论上,开发人员不应该对鉴别器字段的值感兴趣,因为它对 ODM 决定应该实例化什么对象或在单个集合继承的情况下如何查询文档很有用。在用户空间中,您应该担心的只是您正在操作的类的类型。

现在,对于某些历史,异常是在 BETA-10 in 2013 中引入的,但在也无法将鉴别器映射到属性之前,提交似乎加强了防护并引入了一个不那么令人困惑的异常。鉴于之前 6 年前所做的更改,现在我想说永远不可能通过映射属性获得鉴别器字段。

【讨论】:

  • 我认为我应该将属性保留在继承的类中,让我从未看过的代码继续使用它。但也许我错了。我对你为你的论点付出的努力感到惊讶。有你在身边真是太好了。
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 2015-04-10
  • 1970-01-01
  • 2013-01-01
  • 2017-08-13
  • 1970-01-01
  • 2012-04-12
  • 2012-02-06
相关资源
最近更新 更多