【发布时间】:2015-08-10 05:37:58
【问题描述】:
上下文:我今天被要求在一个相当老的项目(比如 Symfony 2.0)上添加一个新功能。它包括向实体添加新属性并将相应的字段添加到版本表单。童玩:我已经编辑了代码,它在开发环境中运行良好(直接在app.php中设置)
问题:当app.php中设置的环境为prod时,表单提交时实体没有被持久化,表单加载时也没有被取回。
调查:到目前为止我在prod env 中检查的内容:
- 提交的表单正确
- 控制器设法映射表单并正确水合实体
- 我已经多次手动和从命令行删除缓存
- 我在提交表单后检查了 SQL 查询,查询没有按预期更新我的新字段
假设:问题似乎出现在实体刷新时,就像新字段被完全忽略了一样。
假设: 在将我的问题暴露给更有经验的 symfony 开发人员之后,唯一的建议是可能有一个 PHP 缓存(不是 symfony 缓存)寄生在我的prodenv 中。这个假设正在测试中(我自己无法重新启动 apache),也许明天我可以在最好的情况下测试它。
不过,我觉得 PHP 缓存假设有 10% 的机会是好的。我无法与您分享整个项目代码,但我想问您是否可以发布您对这个问题的所有想法。
更新:我已经重新启动了 Apache2。问题仍然存在。即使 app/cache/ 为空,Doctrine 似乎也在项目的早期版本上构建了它的缓存(例如,它没有看到注释中的任何更改)。有什么想法吗?
【问题讨论】:
-
这似乎是一个愚蠢的观点,但你没有在你的子弹中特别指出,所以我会问。新映射是否已应用于数据库?您是否从
doctrine:schema:update得到任何差异? -
如果有两个数据库,一个用于
dev,一个用于prod环境:在将新属性添加到实体后,您是否相应地更新了这两个数据库? -
@PeterBailey @insertusernamehere 是的,两个环境都使用同一个数据库。当我在
prodenv 中更新与新字段不同的另一个字段时,它已正确更新(我直接在数据库中使用 SQL 查询对其进行了检查)。doctrine:schema:update告诉我我的数据库已经与当前实体元数据同步。 -
澄清一下,只有当symfony环境是
prod时才有这个问题? -
@PeterBailey 是的,完全正确