2015-08-31 25 views
0

使用dontrine2,我必須有一個實體與以下注釋屬性:如何禁用字符串最大長度的doctrine2實體中的隱式字符串修剪?

/** 
* @var string 
* @Column(type="string", length=4, nullable=false) 
*/ 
protected $someProperty; 

現在,當屬性設置爲foobar,而不是得到一個異常的字符串被修剪到其前四個字符,即foob這是然後存儲到數據庫中。

我知道我可以在setter中實現長度檢查。然而,我會在兩個我寧願避免的地方配置字符串的長度。

我也可以使用驗證,但這也會使配置翻一番。

我發現令人困惑的是doctrine2隱式地縮短了字符串,但是當nullable爲false時將值設置爲null,我得到一個異常。這似乎不一致。

我可以禁用修剪並強制執行異常嗎?還是我必須自己驗證實體?

+0

我認爲Doctrine不會縮短字符串。它發生在數據庫級別上。 – kormik

+0

@kormik這是一個mysql數據庫,如果可能的話禁用該功能將會很好。 – k0pernikus

+0

看看MySql STRICT模式。如果啓用它,它應該引發錯誤而不是截斷數據。 – kormik

回答

1

學說不會做任何驗證既不是任何字符串截斷。所有異常都來自數據庫層。

當您嘗試將空值插入到不允許爲空的列中時數據庫查詢失敗。

當您試圖插入長度超過在列定義中定義的長度的字符串值時,MySql會自動截斷它。您可以更改此配置MySql的行爲以使用STRICT模式。