2

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

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

使用教义 1.2

4

1 回答 1

2

我知道您说您“想要避免添加逻辑来检查每个字段的长度”,但您没有说明这是出于性能原因,还是因为有很多,并且您不想单独编写代码. 如果是后者,我会在教义记录上使用类似的内容:

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”,并使第二个参数为空而不是列长度,然后只需在 MySQL 中设置适当的限制。

于 2011-06-23T03:23:28.943 回答