2017-11-04 94 views
2

所以我似乎困扰于只影响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模式,这意味着我无法将更改上传到远程服务器。真的在这里泡菜...

+2

如果在'dev'环境中有效,而不是'prod',它会被大部分时间缓存。你有缓存:清除--env = prod --no-debug'? – ccKep

+0

说实话,在我的本地机器上,通过GUI文件系统删除'prod'缓存文件夹通常更容易,然后重新加载页面。我不止一次地完成了这一步,并得到了同样的结果。上次我只有一个“prod”问题,这是Symfony中的一个错误,最终由官方补丁修复。 – willherzog

+0

我只是尝试命令行方法,并得到了相同的结果。 – willherzog

回答

0

在我的情况下,我忘了重启'memcached'服务。

检查metadata_cache_driver类型。在我的情况:

doctrine: 
    orm: 
     metadata_cache_driver: 
      type: memcached 
      host: localhost 
      port: 11211 
      instance_class: Memcached 

因为以前的元数据被缓存,应用迁移之后,学说使用了旧的缓存元数据,而无需了解增添了新的领域。

+0

我对每个缓存驱动程序都使用APCu,但过去在应用迁移后我没有遇到这个问题。 – willherzog

+0

注释掉'metadata_cache_driver'行并再次清除'prod'缓存确实会导致页面加载没有错误,但是我找不到正确的CLI命令来清除Doctrine元数据缓存(它给了我错误“无法找到提供者“,即使我指定'prod'作为环境)。 – willherzog

+0

好吧'doctrine:cache:clear-metadata'似乎是正确的命令,但使用它并清除'prod'缓存后,我仍然收到错误。 – willherzog