我已經看過幾篇文章,但找不到工作解決方案。Symfony 2 +學說:如何抑制SQLSTATE [23000]:完整性約束違規:1062重複條目
我的問題是超越簡單:
我有說id
,url
和title
的實體。該URL應該是唯一的(在MySQL PDO中)。我設法創建了實體和模式,沒有任何問題。現在,當我走過一些記錄時,我分別撥打persist()
,最後撥打flush()
。問題是,當我嘗試插入URL的重複條目時,它給了我一個例外。如何抑制它?
當插入一個重複項時,它應該跳過它並插入其餘項。無需事件,ON UPDATE語句,觸發器和所有那些花哨的東西。
我試過抓住persist
或flush()
拋出的任何異常,但看起來似乎無法正確執行。
歡迎任何想法,謝謝!
編輯:發現我的解決方案在這裏:Symfony2 Controller won't catch exception
我真的不知道如何以及在哪裏寫(我是新來的Symfony),但是從文檔,我得到了註解'聲明@ ORM \ Column(..,unique = true)',它仍然會給出SQL錯誤。有趣的部分是錯誤來自MySQL,而不是Doctrine。原則無法知道數據庫中是否存在價值,而不對數據庫進行單獨檢查,而(就績效而言)這是不可接受的。 – 2012-02-09 02:56:02
錯誤來自MySQL,因爲唯一標註指定了該列上的唯一索引。在嘗試將數據插入數據庫之前,您應該驗證您的數據是否正確。捕捉(多個)異常是一個代價高昂的操作。它更有意義,並且是插入前驗證數據的良好實踐。 – 2012-02-09 10:38:15
我明白了,但是我如何驗證實體中的字段在數據庫中是唯一的,而無需進行昂貴的數據庫檢查? – 2012-02-09 16:39:13