【发布时间】:2017-01-21 17:03:09
【问题描述】:
[问题已解决]
大家好,我在一个 symfony 项目上需要你们的帮助。
我有两个实体,“文章”和“图像”,文章可以有多个图像,所以我在文章侧建立了 OneToMany 关系,在图像侧建立了 ManyToOne 关系。 Doctrine 在图像表上为我生成了一个“article_id”列。 我制作了一个表单来创建包含一个或多个图像的文章......但是当我执行它时,我抛出了一个错误:
执行'INSERT INTO image (url, alt, article_id) VALUES (?,?,?)' 时发生异常,参数为 ["jpeg", "untitled.jpg", null]: SQLSTATE [23000]: Integrity违反约束:1048 列“article_id”不能为空。
当我查看探查器日志调试时,我可以看到我有一个“INSERT INTO article[...]”(所以文章是使用 ID 创建的?),就在这之后我有著名的“INSERT INTO image[...]" 发生错误的地方。
感谢您的帮助。
EDIT 以粗体显示您会发现我添加的用于解决此问题的行。
我在 ArticleType 表单中添加了图片收集选项:
'by_reference' => 错误
然后我将 addImage 方法添加到 Article 实体中:
$image->setArticle($this);
$this->images->add($image);
【问题讨论】:
-
啊,是的。霰弹枪接近。您从没有代码到发布所有内容。然而我昨天发布的解决方案没有显示出来。很伤心。这是一个想法。仅使用文章/图像具有的关系使自己成为两个新实体。摆脱其他只会引起混乱的废话。让这两个新实体正确发布,瞧,您可能会明白发生了什么。
-
更好的是,按照文档中的示例进行操作:symfony.com/doc/current/form/form_collections.html
-
谢谢@Cerad。文档引导我解决问题。我添加了您在第一个答案中告诉我的行:$image->setArticle($this),并且我还以相同的方法添加了 $this->images->add($image)。我还在我的表单图像集合选项中添加了“by_reference”=> false。以史为鉴 !实时调频!