Doctrine生成错误的INSERT语句

时间:2017-08-20 19:35:04

标签: php mysql symfony doctrine-orm doctrine

我使用Doctrine和Symfony生成了一个MySQL数据库,并且必须修改一个表,提取它的两个属性并将它们分配给一个新的实体。 第一个实体称为“区域”,第二个实体称为“Formato”。 以前,当我想创建一个新区域时,我提供了它的id,名称,宽度和高度。 (由于应用程序是用西班牙语设计的,宽度称为“ancho”,高度称为“alto”) 现在,使用新设计,我们的想法是提供其id,name和FormatId。 当然,Format表中已经插入了一些格式,而Area将把FormatId作为Formato的外键。 到目前为止,这并不是一件复杂的事情,但是,当我尝试创建一个新区域时,我收到一个错误:

AbstractMySQLDriver->convertException('An exception occurred while executing \'INSERT INTO areas (descripcion, nombre, idarea, ancho, alto, idmedio, idformato) VALUES (?, ?, ?, ?, ?, ?, ?)\' with params ["", "Zilosoft Area7", "21626759324", null, null, "28545628", "1"]:SQLSTATE[42S22]: Column not found: 1054 Unknown column \'ancho\' in \'field list\'', object(PDOException))

因此,正如您所看到的,新的INSERT语句将旧属性与新属性混合在一起,生成一种“混合”或“合并”语句。

我一直在搜索源文件,但无法理解这是怎么回事,因为我的Entities都是最新的,这意味着Area有格式而不是“ancho” “也不是”alto“,而Formato是一个分开的实体,里面有”ancho“和”alto“。

你知道我是否应该在Doctrine中“重置”或“清理缓存”,以便它生成正确的Insert语句?

顺便说一下,formato是从Twig模板中的组合框中获取的数据,它是从Formatos表中加载的。

1 个答案:

答案 0 :(得分:0)

您只是错过了最后一步

因此,您更新了实体以改进,更新或简单地修改数据结构,但是MySQL数据库仍然不知道您进行了这些更改。解决这个问题的方法是告诉Doctrine update the schema。你这样做的方法是在你的机器上运行以下命令:

php bin/console doctrine:schema:update --force

请注意,--force会尝试直接运行查询。如果您希望自己运行查询,可以使用--dump-sql选项,这将打印出您的所有查询