我在教义中创建继承对象时遇到问题...我现在是第一次使用教义...
一些细节:sql数据库:SQL
DescribableVersionedEntity是超类(连接的继承类型),每个Entity继承该超类。(所以我必须使用类继承,是吗?)
实体:
执行代码:
$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中如何看到,我为每个Entity创建了一个表,并使用了继承类型“ Joined”。
因此,下一个问题是:我是否必须在原则上声明下一个顶级实体或最顶级的实体作为外键?
next-top: UserChapter(FK_UserChapter_Chapter), Chapter(FK_Chapter_ChecklistElement), ChecklistElement(FK_ChecklistElement_DVE) or
top-of-the-top: UserChapter(FK_UserChapter_DescribableVersionedEntity)
我想我必须使用最上层的,因为我不需要创建章节对象(例如,如果是UserChapter对象)
那么:我的体系结构是否与MySql数据库兼容?如果是-为什么创建翻译会出现问题,导致describableVersionedEntity为null?
我希望有人能帮助我,但在stackoverflow中找不到与我的问题相匹配的解决方案。.我很确定这是一个关键问题...
提前致谢!!
您必须将UserChapter
类添加到DiscriminatorMap
中DescribableVersionedEntity
。
* @ORM\DiscriminatorMap({"describableversionedentity" = "DescribableVersionedEntity", "checklist" = "Checklist", "layout" = "Layout", "checklistelement" = "ChecklistElement", "footnote" = "Footnote", "contentelement" = "ContentElement", "userchapter" = "UserChapter"})
规则是,继承(DescribableVersionedEntity
)的根类必须包含中的所有子类,DiscriminatorMap
而不仅仅是直接子类。子类DiscriminatorMap
即使是其他类的基础也不会定义。因此,将DiscriminatorMap
内容从ChecklistElement
移至根类-DescribableVersionedEntity
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句