【问题标题】:Doctrine auto-truncate values on insert教义在插入时自动截断值
【发布时间】:2011-06-06 15:23:12
【问题描述】:

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

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

使用 Doctrine 1.2

【问题讨论】:

    标签: php mysql doctrine doctrine-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);
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多