我使用Doctrine和Symfony生成了一个MySQL数据库,并且必须通过提取其两个属性并将它们分配给一个新的实体来修改一个表。 第一个实体称为"区域",第二个实体称为"Formato"。 以前,当我想创建一个新区域时,我提供了它的 id、名称、宽度和高度。 (由于应用程序是用西班牙语设计的,宽度称为"ancho",高度称为"alto"( 现在,通过新设计,想法是提供其 ID、名称和 FormatId。 当然,格式表中已经插入了一些格式,并且区域将具有 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"。
您知道我是否应该喜欢教义中的"重置"或"清理缓存",以便它生成正确的插入语句吗?
顺便说一下,formato 是从 Twig 模板中的组合框中获取的数据,并从 Formatos 表中加载
。你只是错过了最后一步
因此,您更新了实体以改进,更新或简单地修改数据结构,但是MySQL数据库仍然不知道您进行了这些更改。解决这个问题的方法是告诉教义更新模式。执行此操作的方法是在计算机上运行以下命令:
php bin/console doctrine:schema:update --force
请注意,--force
将尝试直接运行查询。如果您希望自己运行查询,则可以使用--dump-sql
选项,该选项将打印出您的所有查询