问题标签 [class-table-inheritance]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
976 浏览

php - 学说类表继承不能删除()实体

我尝试实现 Doctrine 的类表继承。我的应用程序需要一个用户实体,用于通过Symfony的安全系统对用户进行身份验证。最重要的是,我的应用程序需要一种特殊的用户,医生。您可以在下面找到我的实体类的摘录。

用户类(基础):

医生实体扩展用户:

奇怪的是,我既不能删除Users也不能Doctors使用 EntityManager 的remove()方法,我从来没有遇到过问题。当我使用该方法时,不会引发或记录任何错误,但 Entity 实例仍保留在数据库中。

我找到了一种解决方法,使用手动查询从数据库中删除对象。

所以我可以只使用上面的代码,但我仍然想知道是什么导致了这个问题的发生? 提前致谢!

0 投票
2 回答
507 浏览

mysql - 如何将描述符列定义为 Doctrine 中类表继承的 ENUM?

我想实现类表继承

由于我运行“代码优先”方法,因此数据库由 Doctrine 生成:

鉴别器列foos.type获取类型VARCHAR(255)。我希望它得到一个ENUM

如何定义实体类的注解来获取ENUM判别器?

0 投票
1 回答
146 浏览

doctrine - 具有自引用 ManyToMany 的继承实体:EXTRA_LAZY 获取模式不起作用

我必须遵循设置:父类

和几个持有对父级的引用的派生类(这里只显示一个)

现在,当通过 加载所有 MultiCompoundDataCategories 时 $this->getDoctrine()->getRepository(MultiCompoundDataCategory::class)->findAll(),不仅在 MultiCompoundDataCategories 上发出一个选择(在 ManyToMany 表上连接)。相反,我得到一个主查询,然后是每个summand 的一个查询,每个查询都有一个大的胖序列LEFT JOIN文档也包含有关此问题的警告,我大量引用继承树的非叶节点)。

顺便说一句:LAZY获取已经足以避免加载 ManyToMany 吗?

这个评论中,我认为问题是我的子实体引用了父实体。我该如何规避这个?映射超类?

0 投票
0 回答
193 浏览

mysql - 对支持过滤不同类型的公共属性的 MySQL 模式设计的建议?

我想在 MySQL 中表示以下类型系统(这是一个分层类型系统,而不是分层数据):

它由继承树表示,如下所示:

本质上,我想在我的 MySQL 数据库中存储一组类型B和(“叶”类型)的对象。C我还想对我的一组对象运行下面的每个示例查询:

  1. 获取以SORT BY 偏移量 0 限制 10开头的类型A的对象nametetraname
  2. 获取类型为SORT BY 偏移量 10 限制 10B的对象colorbluename
  3. 获取类型为SORT BY限制 10C的对象shapesquareid

我想知道满足这些要求的最佳 MySQL 模式是什么?


这是我目前的方法,尽管我有点犹豫是否要继续前进,因为它需要大量的非规范化:

因此,对于上述任何查询,我们都会参考该Objects表来执行过滤/排序/分页。然后我们可以返回结果s 并在各个 ObjectOfType 表中id解析这些s。id这里的缺点是我们必须使“参考”表与所有单独的类型表保持同步,并且我们正在复制数据存储。

或者,我还考虑过运行多个单独的查询,然后在内存中加入它们。以查询#1(获取以SORT BY偏移量 0 限制 10开头的类型A的对象)为例,方法是:nametetraname

  1. 获取以SORT BY限制 10开头的类型B的对象nametetraname
  2. 获取以SORT BY限制 10开头的类型C的对象nametetraname
  3. 合并结果并返回前 10 个。返回一个复杂的游标,该游标记录了我们从 B 和 C 中的每一个中提取了多少可用于后续分页的元素。

这种方法的一个缺点是这里的分页可能会变得非常复杂并为 MySQL 添加额外的工作,特别是如果类型系统具有高“扇出”。

任何有关此问题的提示将不胜感激。谢谢!

0 投票
1 回答
1178 浏览

php - Doctrine class table inheritance mapping: why a foreign key to parent table?

Short question: can I avoid generating foreign keys for inherited classes to parent classes? Can a discriminator column for inherintance mapping be set in a relation owner instead of a parent class?

Explanation:

I am designing a model for invoices, where invoice subject can be 1 of 3 types:

  • Contract
  • Client
  • Provider

After reading Doctrine inheritance mapping I think Class table inheritance is the one that best fits my needs.

Mapped superclass could better fit my needs if I could draw a relation from Invoice to InvoiceSubject, but I think I can't:

A mapped superclass cannot be an entity, it is not query-able and persistent relationships defined by a mapped superclass must be unidirectional (with an owning side only). This means that One-To-Many associations are not possible on a mapped superclass at all. Furthermore Many-To-Many associations are only possible if the mapped superclass is only used in exactly one entity at the moment.

Also, using an Interface could be a solution, but an interface in a relation can only be mapped to one entity.

So, this is my model:

But, when I try to generate the model (bin/console doctrine:schema:update --dump-sql) I see its trying to create foreign keys from child classes to parent (tables already exist and have data):

This means that there will be collisions between id's coming from different tables or I will need to use different values in every table, none of the solutions are good. So, the question is:

  • Is there a way to avoid this foreign key and set the discriminator in the relation owner class Invoice? In my case, InvoiceSubject doen't actually need to exist as a table, I'm forced to create it as Class table inheritance forces me to do so.
  • Or, is this modelling completely wrong and I should use another aproach?
0 投票
2 回答
357 浏览

postgresql - 在基于 postgres 数据库的数据仓库中实现继承的最佳方法

我正在开发一个多步数据管道,应该优化以下过程:

1) 从NoSQL数据库 ( MongoDB ) 中提取数据。

2)将数据转换并加载到关系(PostgreSQL)数据库中。

3)使用Postgres数据库建立数据仓库

我手动编写了一个脚本来处理步骤 1) 和 2),这是一个中间 ETL 管道。现在我的目标是使用Postgres数据库构建数据仓库,但我对 DW 设计有一些疑问。下面是关系数据库的维度模型:

在此处输入图像描述

有 2 个主表,OccurrenceCanonical,从中继承了一组其他表(分别以红色和蓝色绘制)。请注意,有 2 个子数据类型ObserverNodeOccurrenceCanonicalObserverNode与另一个表具有额外的多对多关系。

我对如何在数据仓库中实现继承进行了一些研究,并认为最佳实践是将家庭数据类型(超级表和子表)合并到一个表中。这样做意味着添加额外的属性和大量值。我的新维度模型如下所示:

在此处输入图像描述

问题1:您认为这是解决这个问题的最佳方法吗?如果不是,那会是什么?

问题 2:有针对本地数据仓库的软件推荐吗?(内部部署是必须的,因为它包含敏感数据)

0 投票
1 回答
70 浏览

symfony - 使用必填字段查询 Doctrine 类表继承

我的域有一个父IncidenceMessage类和几个子类(即IncidenceMessageText)。我有以下类表继承配置:

我可以正确创建任何IncidenceMessage实体。

只有一个IncidenceMessageTextin 数据库,当我尝试获取事件消息时,我收到以下错误:

FileId是一个值对象,表示 File 实体的 id)

IncidenceMessageImageFile一个外键字段,它是必需的。

FileDoctrine在IncidenceMessageText没有该字段时获取对我来说毫无意义。

在调试时,我发现教义对每个IncidenceMessage表都使用 LEFT JOIN 进行 SELECT,这调用了我的FileTypeId::convertToPHPValue方法:

AFAIK,这里的问题是子类有必填字段,但这不应该是一个障碍,对吧?

0 投票
2 回答
155 浏览

symfony - 类表继承中的级联删除不会删除父行

我有一个名为 的父类Notification,它有CommentNotification一个子类(类表继承)。

CommentNotification中,我已包含onDelete = "CASCADE",因此当评论被删除时,附加到它的通知也会被删除。

根据要求,我也显示 ContentItemComment。这不包含与 CommentNotification 的双向关系。

但是,它成功删除了 in 中的行comment_notification,但 in 中的行notification仍然存在,在通知表中留下了我每次都必须手动删除的幽灵记录。

Fe 这个查询每天都会返回一些新的结果:

我错过了注释Notification吗?

0 投票
1 回答
1548 浏览

symfony - 当抽象超类实体中存在多对多、自引用关系时,Api 平台中出现“无法生成 IRI”错误

我有一个抽象实体“节点”超类,下面的代码是其他四个实体子类的基础。我想以任何顺序嵌套它们以创建一个松散的层次结构,其中任何类型的节点都可以是任何其他类型的父节点或子节点,并且任何节点都可以有多个父节点。

src/Entity/Node.php

此类由其他四个实体扩展,它们在 Symfony 5 项目中使用 Api 平台作为 ApiResource 公开。它们都有几乎相同的代码:

src/Entity/Project.php

暴露的实体显示在 Api Platform Dashboard 中,如果抽象 Node 实体没有自父子关系,可以查询成功。换句话说,如果我从 Node 类中删除所有 get/add/removeXXXXNodes 方法和相关变量,API 就可以工作。

但如果存在关系,则会出现 400 错误:

获取http://localhost/api/projects

问题似乎是 vendor/api-platform/core/src/Bridge/Symfony/Routing/IriConverter.php 中的 getItemIriFromResourceClass() 方法在节点与其他节点没有父子关系时接收空值。

有谁知道如何使这项工作?任何帮助表示赞赏。提前致谢。

参考:

0 投票
0 回答
47 浏览

doctrine-orm - 教义继承映射——在更新时添加级联到 id 字段

我已经用单独的表继承映射设置了我的数据,但是 Doctrine 似乎对它提供了非常有限的控制。
除其他问题外,我得到的一个问题是它仅在 DELETE 上级联。

(我使用 XML 映射)
据我所见,级联放置在关系标记内,而使用继承映射的 ID 列中不存在级联。

有没有简单的方法可以确保我的数据保持一致?(例如,如果从外部访问)?
没有这个,即使是对我的一条数据行的简单更新也会变得复杂,因为它会违反约束。

编辑@Cerad:这是一个示例工作示例。我使用 MariaDB 10.3.22