gpt4 book ai didi

php - 完整性约束违规 - 如何使用类表继承在 Doctrine 中创建实体

转载 作者:行者123 更新时间:2023-11-29 13:21:40 24 4
gpt4 key购买 nike

我在教义中创建继承对象时遇到问题...我现在第一次使用教义...

一些细节:SQL数据库: SQL

描述版本实体是父类(super class)(继承类型Joined),每个实体都继承自它。 (所以我必须使用类继承,是吗?)

实体:

Entitys

执行代码:

$owner = $this->getEntityManager()->getRepository('ChecklistCore\Entity\Owner')->find(3);
$layout = new Layout();
//Add some Attributes... (not listed here)
$layout->owner = $owner;

$translLayout = new Translation($layout);
$translLayout->text = "Translation Layout";

$cl = new Checklist($layout);
$cl->changeNoteComment = "new ChecklistComment";
$cl->owner = $owner;
$translChecklist = new Translation($cl);
$translChecklist->text = "Translation Checklist";

$userChapter = new UserChapter($cl);
$userChapter->owner = $owner;
$userChapter->isActive = true;
$translUserChapter = new Translation($userChapter);
$translUserChapter->text = "Translation UserChapter";

以及错误 SQL/消息:

文件:

C:\Program Files (x86)\Zend\Apache2\htdocs\ChecklistSystem\vendor\doctrine\dbal\lib\Doctrine\DBAL\DBALException.php:91

消息:

An exception occurred while executing 'INSERT INTO translation (language, text, describableVersionedEntity) VALUES (?, ?, ?)' with params [null, "Translation UserChapter", null]:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'describableVersionedEntity' cannot be null

我读到,外键(例如在 UserChapter 中)必须链接到顶部 - 第一个父级。在我的示例中,继承路线是:

DescribableVersionedEntity->ChecklistElement->Chapter->UserChapter

所以我有 3 个抽象“父”类,最后一个是可用的对象,即 UserChapter。您可以在 SQL 中看到,我为每个实体创建了一个表并使用继承类型“Joined”。

那么下一个问题:我是否必须在原则上声明下一个顶级实体或顶级实体作为外键?

next-top: UserChapter(FK_UserChapter_Chapter), Chapter(FK_Chapter_ChecklistElement), ChecklistElement(FK_ChecklistElement_DVE) or

top-of-the-top: UserChapter(FK_UserChapter_DescribableVersionedEntity)

我认为我必须使用顶层,因为我不需要创建一个 Chapter 对象(如果是 UserChapter 对象)

那么:我的架构在理论上与 MySql 数据库兼容吗?如果是 - 为什么创建翻译会出现问题,导致 describableVersionedEntity 为 null??

我希望有人能帮助我,我在 stackoverflow 中找不到与我的问题匹配的解决方案。我很确定这是一个关键问题......

提前致谢!!

最佳答案

您必须将 UserChapter 类添加到 DescribableVersionedEntityDiscriminatorMap

 * @ORM\DiscriminatorMap({"describableversionedentity" = "DescribableVersionedEntity", "checklist" = "Checklist", "layout" = "Layout", "checklistelement" = "ChecklistElement", "footnote" = "Footnote", "contentelement" = "ContentElement", "userchapter" = "UserChapter"})

规则是继承的根类 (DescribableVersionedEntity) 必须包含 DiscriminatorMap 中的所有子类 - 而不仅仅是直接子类。子类不定义 DiscriminatorMap,即使它们是其他类的基础。因此,将 DiscriminatorMap 内容从 ChecklistElement 移动到根类 - DescribableVersionedEntity

关于php - 完整性约束违规 - 如何使用类表继承在 Doctrine 中创建实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20746980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com