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

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表中加载了它。

最佳答案

您只缺少最后一步

因此,您更新了实体以改进,更新或简单地修改数据结构,但是MySQL数据库仍然不知道您进行了这些更改。解决的方法是通过告诉教义update the schema。执行此操作的方法是在计算机上运行以下命令:

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


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

10-05 19:59