[问题已解决]
嘿伙计们我需要你对symfony项目的帮助。
我有两个实体,"文章"和"图像",文章可以有多个图像,所以我在文章方面建立了OneToMany的关系,在图像方面创建了ManyToOne。学说为我创造了一个" article_id"图像表上的列。 我创建了一个表单来创建一个包含一个或多个图像的文章...但是当我执行它时,我会抛出一个错误:
执行' INSERT INTO image(url,alt,article_id)VALUES(?,?,?)'与params [" jpeg"," untitled.jpg",null]:SQLSTATE [23000]:完整性约束违规:1048列' article_id'不能为空。
当我查看探查器日志调试时,我可以看到我有一个" INSERT INTO文章[...]" (所以这篇文章是用ID创建的?)就在这之后我就有了着名的" INSERT INTO图像[...]"发生错误的地方。
感谢您的帮助。
编辑以粗体显示我将添加的行以解决此问题。
我在图片集合选项中添加了ArticleType表单:
' by_reference' =>假
我将addImage方法添加到Article实体中:
$图像 - > setArticle($此);
$这 - >图像 - >添加($图像);
答案 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,article_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