Symfony2 - 表单集合 delete_empty 失败

Posted

技术标签:

【中文标题】Symfony2 - 表单集合 delete_empty 失败【英文标题】:Symfony2 - form collection delete_empty fails 【发布时间】:2015-04-04 06:53:19 【问题描述】:

我有一个嵌入式表单集合字段。父母是相反的一面,孩子(嵌入)是拥有的一面。我想动态地允许添加/删除孩子。添加作品,也删除(在 orphanRemoval=true 的帮助下)。当我将子表单留空时,我得到:

An exception occurred while executing 'INSERT INTO child
(content, completed, parent_id, created_by) VALUES (?, ?, ?, ?)'
with params [null, 0, 30,  8]: Column 'content' cannot be null

内容字段是唯一呈现的字段。该字段根本不应该被保留,因为“delete_empty”和“allow_delete”都设置在字段类型中。 任何想法为什么会发生这种情况?

编辑:

我从实体中删除了所有元数据,以确保它确实是空的。 Doctrine 尝试插入 (null,null,null,null)。

【问题讨论】:

【参考方案1】:

我已经设法解决了这个问题。我在 createForm 方法中添加了空子项。逻辑如下:

编辑动作:

$parent = $em->getRepository('AppBundle:parent')->find($id);
$editForm->createEditForm($parent)

创建编辑表单方法:

public function createEditForm(Parent $parent)
    $child = new Child();
    $parent->setChild($child);
    $form = $this->createForm(...)

修复:

在创建表单之前,需要在编辑操作中添加子项(因此传递给表单创建的实体已经具有空实体)。

【讨论】:

你能澄清一下解决方案是什么吗?我不明白如果你在方法中或之前实例化孩子会有什么不同。 坦率地说@RyanB——我不知道。我已经在 Symfony2 github 问题跟踪器上报告了它作为一个错误。

以上是关于Symfony2 - 表单集合 delete_empty 失败的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 - 无法使用集合保存表单

Symfony 2 中的 ArrayCollection(表单集合)索引冲突

Symfony2:集合中的单选按钮

如何在循环symfony2中为同一实体添加重复的表单

Symfony2 独立表单组件 v2.3 - 设置表单

Symfony2 防止多个表单提交