2011-06-06 132 views
1

我正在研究從第三方合作伙伴讀取XML並將數據放入數據庫表中的腳本。我無法控制內容的長度或質量。我想避免添加邏輯來檢查每個字段的長度。插入原則自動截斷值

例如:我在varchar(255)類型的mysql數據庫中有一列,XML導入的值大於255個字符。我想學說插入而不是拋出有消息Doctrine_Validator_Exception前255個字符「1個驗證失敗的標題(長度)」

使用學說1.2

回答

1

我知道你說你「要避免添加邏輯檢查每個字段的長度「,但您沒有指定是出於性能原因還是因爲有很多,而且您也不想單獨編寫代碼。如果是後者,我會用的原則記錄是這樣的:

function set($fieldName, $value, $load = true) { 
    switch($fieldName) { 
    case 'id': 
    case 'foo': 
    case 'bar': 
    // list all of the fields that you DON'T want to truncate in this section 
    break; 
    default: 
    $value = substr($value, 0, 255); 
    } 
    parent::set($fieldName, $value, $load); 
} 

此功能覆蓋上記錄的默認設置()方法。它會將所有字段截斷爲與第一部分(id,foo,bar)中列出的字符不匹配的255個字符。

如果這不是你想要的,你可以讓MySQL做截斷,如果你寫過列長度(1265 | Data truncated for column 'xxx' at row 1),它會發出一個警告,但是當查詢完成時它會被Doctrine丟棄。爲此,您可以將列類型從「字符串」更改爲「blob」,並將第二個參數設置爲null而不是列長度,然後在MySQL中設置適當的限制。