Doctrine自动截断插入值

时间:2011-06-06 15:23:13

标签: php mysql doctrine doctrine-1.2

我正在编写一个脚本,该脚本从第三方合作伙伴读取XML并将数据放在数据库表中。我无法控制内容的长度或质量。我想避免添加逻辑来检查每个字段的长度。

例如:我在varchar(255)类型的mysql数据库中有一个列,XML导入的值大于255个字符。我希望Doctrine插入前255个字符而不是抛出Doctrine_Validator_Exception,并在消息“标题(长度)上1个验证器失败”

使用Doctrine 1.2

1 个答案:

答案 0 :(得分:1)

我知道你说你“想避免添加逻辑来检查每个字段的长度”,但你没有说明这是出于性能原因,还是因为有很多,而你不想写代码单独。如果是后者,我会在Doctrine Record中使用类似的东西:

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);
}

此函数会覆盖Record上的默认set()方法。它会将所有字段截断为255个字符,这些字符与第一部分(id,foo,bar)中列出的字符不匹配。

如果那不是您想要的,您可以让MySQL进行截断,如果您写过列长度(1265 | Data truncated for column 'xxx' at row 1),它会发出警告,但是当查询完成时,Doctrine会将其丢弃。为此,您可以将列类型从“string”更改为“blob”,并将第二个参数设置为null而不是列长度,然后在MySQL中设置适当的限制。