Symfony3 Doctrine2列不能为空

时间:2017-01-21 17:03:10

标签: sql symfony doctrine

[问题已解决]

嘿伙计们我需要你对symfony项目的帮助。

我有两个实体,"文章"和"图像",文章可以有多个图像,所以我在文章方面建立了OneToMany的关系,在图像方面创建了ManyToOne。学说为我创造了一个" article_id"图像表上的列。 我创建了一个表单来创建一个包含一个或多个图像的文章...但是当我执行它时,我会抛出一个错误:

  

执行' INSERT INTO image(url,alt,art​​icle_id)VALUES(?,?,?)'与params [" jpeg"," untitled.jpg",null]:SQLSTATE [23000]:完整性约束违规:1048列' article_id'不能为空。

当我查看探查器日志调试时,我可以看到我有一个" INSERT INTO文章[...]" (所以这篇文章是用ID创建的?)就在这之后我就有了着名的" INSERT INTO图像[...]"发生错误的地方。

感谢您的帮助。

编辑以粗体显示我将添加的行以解决此问题。

我在图片集合选项中添加了ArticleType表单:

' by_reference' =>假

我将addImage方法添加到Article实体中:

$图像 - > setArticle($此);

$这 - >图像 - >添加($图像);

3 个答案:

答案 0 :(得分:0)

这是一个非常常见的问题,但却难以搜索。实际上,前十个搜索结果的答案都不正确。

无论如何,您需要确保图片链接到文章。

>>> s = "s\\u"
>>> s
's\\u'
>>> print(s, len(s))   # length of s is 3, not 4
s\u 3

答案 1 :(得分:0)

我认为@ Cerad的回答是非常错误的,虽然我不能责怪他,因为OP没有发布足够的代码,不要害羞,我们'在这里帮助。如果你刚开始(我怀疑你是),它也会有所帮助,因为它可以帮助我们判断它是一个新手问题还是更深层次的事情。

由于我认为这是一个新手问题,这是新手解决方案。

通过他们映射的方式(我相信这是正确的)你基本上告诉Doctrine告诉你的RDBMS(MySql / MariaDB / PostgreSQL)文章可以有很多图像,但是图像必须属于一个制品

这意味着如果您尝试保存图像而未指定拥有的文章,则会引发错误。

这就是我认为你在行

中所表现出来的
  

(url,alt,art​​icle_id)VALUES(?,?,?)' with params [" jpeg"," untitled.jpg",null]

值" null"是问题的发生地,因为你没有指定拥有的文章。

您有2个选项

1。)保存图像时,如果手边有文章对象,请执行

$image->setArticle($article);

2。)保存图像时,如果手头有article_id,只需执行

$image->setArticle($em->getReference('AppBundle\Entity\Articles', $article_id));

直接保存图像时,必须遵循以上其中一项。

我的一般经验是,Doctrine在命令行生成实体方面做得非常好,除非添加一些高级功能,如second_level_cache或MySQL点类型,否则您真的不需要进行更改。

干杯。

答案 2 :(得分:0)

问题是,当您提交表单时,第一个图像附加到文章但其他图像不附加,因此您会收到SQL错误。 您必须为每个图像执行“foreach循环”,并将文章附加到每个图像上。 在这里查看addAction函数 https://github.com/ismail1432/TheGoodLoc/blob/master/Symfony/src/VTC/AnnonceBundle/Controller/AdvertController.php