Symfony3 Doctrine2列不能为null



[问题已解决]

嘿,伙计们,我需要你们帮忙做一个symfony项目。

我有两个实体,"文章"one_answers"图像",文章可以有几个图像,所以我在文章端建立了OneToMany和在图像端建立了ManyToOne的关系。Doctrine为我在图像表上生成了一个"article_id"列。我制作了一个表格来创建一篇带有一个或多个图像的文章。。。然而,当我执行它时,我会抛出一个错误:

使用params["jpeg","untitled.jpg",null]执行"INSERT INTO image(url,alt,article_id)VALUES(?,?,?)"时发生异常:SQLSTATE[23000]:完整性约束冲突:1048列"article_id"不能为null。

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

谢谢你的帮助。

EDIT在粗体中,您可以找到我为解决此问题而添加的行

我添加到ArticleType表单中,在图像收集选项中为:

'by_reference'=>false

我在文章实体中添加了addImage方法:

$image->setArticle($this)

$this->images->add($image)

这是一个非常常见的问题,但搜索起来却异常困难。事实上,前十个左右的搜索结果都有错误的答案。

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

class Article
public function addImage($image) {
$this->images[] = $image;
$image->setArticle($this); // ADD THIS

我认为@Cerad的回答是非常错误的,尽管我不能责怪他,因为OP没有发布足够的代码,不要害羞,我们在这里提供帮助。如果你刚刚起步(我怀疑你是这样),这也有助于我们判断这是新手问题还是更深层次的问题。

既然我假设这是一个新手问题,这里就是新手解决方案。

按照你的映射方式(我认为这是正确的),你基本上是在告诉Doctrine告诉你的RDBMS(MySql/MariaDB/PostgreSQL)一篇文章可以有很多图像,但图像必须属于一篇文章。

这意味着,如果您试图在不指定所属文章的情况下保存图像,它将引发错误。

这就是我认为你正在做的明显的

(url,alt,article_id)VALUES(?,?,?)'带参数["jpeg","untitled.jpg",null]

值"null"是问题产生的原因,因为您没有指定所属文章。

你有两个选项

1.)保存图像时,如果你手头有物品,只需进行

$image->setArticle($article);

2.)保存图像时,如果手头有article_id,只需进行即可

$image->setArticle($em->getReference('AppBundleEntityArticles', $article_id));

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

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

干杯。

问题是,当您提交表单时,第一个图像会附加到文章中,而其他图像则没有,因此会出现SQL错误。你必须为每个图片做一个"foreach循环",并将文章粘贴到每个图片上。看看addAction函数https://github.com/ismail1432/TheGoodLoc/blob/master/Symfony/src/VTC/AnnonceBundle/Controller/AdvertController.php

相关内容

最新更新