学说2.5:无法识别的领域(但只在Symfony的产品模式)
所以我似乎困扰于只影响Symfony而不是开发模式的生产模式的问题。这一次,我有一个ManyToOne关联,我试图只抓取那些没有关联的实体(即它们在数据库中有一个NULL值)。这与我在开发移动时所期望的完全一样,但在prod模式下,Doctrine会抛出一个“无法识别的字段”异常......对于绝对存在的字段。学说2.5:无法识别的领域(但只在Symfony的产品模式)
这里的实体问题的相关部分(page.php文件):
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="pages")
* @ORM\JoinColumn(name="project_id", referencedColumnName="ID")
*/
protected $project;
这里是从控制器相关行(PageController.php):
$pages = $this->getDoctrine()->getRepository('JCScopingBundle:Page')->findBy(['project' => null]);
同样,这完美地使用app_dev.php(即开发模式),但使用app.php(即产品模式),我不断收到“无法识别的领域”的例外。是什么赋予了?
更新:我向同一个实体添加了“权重”整数字段,并且该字段在prod
模式下也不能识别。这意味着我不能使用prod
模式,这意味着我无法将更改上传到远程服务器。真的在这里泡菜...
呃,低下瞧,重启Apache服务解决了这个问题。显然这是真正清除APCu元数据缓存的唯一方法。我被启发尝试基于这个问题/答案:Doctrine mapped field is not working
在我的情况下,我忘了重启'memcached'服务。
检查metadata_cache_driver
类型。在我的情况:
doctrine:
orm:
metadata_cache_driver:
type: memcached
host: localhost
port: 11211
instance_class: Memcached
因为以前的元数据被缓存,应用迁移之后,学说使用了旧的缓存元数据,而无需了解增添了新的领域。
我对每个缓存驱动程序都使用APCu,但过去在应用迁移后我没有遇到这个问题。 – willherzog
注释掉'metadata_cache_driver'行并再次清除'prod'缓存确实会导致页面加载没有错误,但是我找不到正确的CLI命令来清除Doctrine元数据缓存(它给了我错误“无法找到提供者“,即使我指定'prod'作为环境)。 – willherzog
好吧'doctrine:cache:clear-metadata'似乎是正确的命令,但使用它并清除'prod'缓存后,我仍然收到错误。 – willherzog
如果在'dev'环境中有效,而不是'prod',它会被大部分时间缓存。你有缓存:清除--env = prod --no-debug'? – ccKep
说实话,在我的本地机器上,通过GUI文件系统删除'prod'缓存文件夹通常更容易,然后重新加载页面。我不止一次地完成了这一步,并得到了同样的结果。上次我只有一个“prod”问题,这是Symfony中的一个错误,最终由官方补丁修复。 – willherzog
我只是尝试命令行方法,并得到了相同的结果。 – willherzog