鉴别器图中缺少的实体

Posted

技术标签:

【中文标题】鉴别器图中缺少的实体【英文标题】:Entities missing from discriminator maps 【发布时间】:2018-01-28 12:40:53 【问题描述】:

我在运行CentOS 7php 7.0.25mariaDB 5.5.56 的Vagrant 虚拟机上使用Symfony 3.3.15Doctrine 2.5.14 设置。

我有几组具有单表继承的实体设置。我让 Doctrine 为我构建鉴别器图。由于某种原因,Doctrine 似乎并未将所有相关实体添加到鉴别器映射中。这发生在几组实体中。例如:

我有一张表映射了 10 个实体,但是当我得到带有 $this->getDoctrine()->getManager()->getClassMetadata(ParentEntity::class) 的鉴别器映射时,discriminatorMap 数组中只有 8 个条目。尝试加载页面时出现如下错误:

实体“ChildEntity”必须是“ParentEntity”鉴别器映射的一部分,才能在继承层次结构中正确映射。或者,您可以将“ChildEntity”设为抽象类以避免发生此异常。

这只发生在我的开发机器上。我的代码在生产中运行(AWS 上的 CentOS 7)没有问题。

我认为这可能是缓存问题like this,但我已经清除了 Symfony 缓存(并删除并重新创建了它),我还使用console doctrine:cache:clear-metadata 清除了 Doctrine 缓存,但没有任何变化。我还尝试将整个项目的权限设置为0777,但仍然没有运气。

有谁知道我为什么会收到这些错误以及如何修复它们?

【问题讨论】:

【参考方案1】:

我不确定确切的问题是什么,但升级到最新版本的 Vagrant (2.0.2) 和 VirtualBox (5.2.6) 可以解决这个问题。

【讨论】:

以上是关于鉴别器图中缺少的实体的主要内容,如果未能解决你的问题,请参考以下文章

在扩展另一个实体中使用鉴别器

Symfony2:字段或鉴别器列映射中实体上列“id”的重复定义

EF- '' 和 '' 都映射到表 ''。层次结构中没有鉴别器的所有实体类型必须映射到不同的表

Sonata Admin => 只选择给定的鉴别器映射类型

鉴别器

kotlinx-serialization:找不到多态序列化器,因为缺少类鉴别器('null')