2017-06-06 66 views
0

我只是遇到了Symfony2和Doctrine ORM的一個非常奇怪的問題。它停止在我的一個表中插入數據,在過去的幾個月中沒有做任何更改,但它開始失敗,儘管沒有Doctrine異常或任何其他內容,分析器顯示插入操作正確。實體接收ID 0並且數據庫中沒有記錄。Symfony2 + Doctrine INSERT查詢失敗,沒有錯誤

這只是一個基本的persist + flush組合映射實體。是的,實體被映射(也在Profiler中檢查)。

我想知道是否有任何情況下,儘管查詢沒有執行/不成功,Doctrine不會拋出異常?我不知道在哪裏尋找它。我確實檢查了所有可能的配置。沒有例外拋出。這一切看起來都很好,它應該是這樣,但數據沒有插入。

我曾嘗試直接使用命令行執行相同的查詢,它工作得很好。

我使用的Symfony 2.8學說版本 2.7.2主義\常見,學說\ ORM - (根據composer.lock)2.5.6

編輯

我剛開始變得非常奇怪的行爲從教條到處。很少有查詢在從Doctrine ORM執行時不返回任何結果,但直接執行時可以正常工作。

回答

0

我確實解決了這個問題。它與PDO/DBAL和MySQL準備的語句模擬使用PDO::ATTR_EMULATE_PREPARES(你可以閱讀它here)。

只需將此選項恢復爲真即可解決問題。我不得不調整我依賴於錯誤的其他代碼部分。

只是爲了防止有人遇到這種問題,在Symfony2中這是我如何配置它,只需刪除選項20以恢復默認值。請記住,任何返回整數的DBAL查詢(可能還有其他類型)將返回字符串。

doctrine: 
    dbal: 
     default_connection: default 
     connections: 
      default: 
       driver: pdo_mysql 
       host:  "%database_host%" 
       port:  "%database_port%" 
       dbname: "%database_name%" 
       user:  "%database_user%" 
       password: "%database_password%" 
       charset: UTF8 
       options: 
        20: false // if you have this line and value set to false or 0, just remove it, this option defaults to true