2017-11-04 98 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