CakePHP saveAll()具有唯一约束

时间:2013-08-06 17:01:35

标签: php mysql cakephp

我正在开发一个应用程序,用户将从文本文件中导入几千条记录。我对表中的3列有唯一约束,但是当我尝试导入重复记录时,我收到此错误。

Error: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '2013-06-01 15:25:41-2013-06-01 15:25:42-null' for key 'start_time'

看起来,一旦插入因违反约束而失败,CakePHP将停止尝试插入数据。有没有办法让CakePHP忽略约束违规?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

这实际上取决于您导入数据的方式以及您正在使用的RDBMS。

如果您在文本文件上逐行循环并在每行之后插入数据,则可以捕获异常并转到文本文件的下一行。只需记住将失败的行推入某种错误日志,这样您就能找到哪些插入失败。我看到的更大问题是抛出的异常可能破坏了您当前的事务,对于大量数据插入,您肯定希望将所有内容包装在单个事务中以获得最佳性能。

如果您使用的是MySQL和CSV文件,则可以使用LOAD DATA INFILE命令进行探索。

答案 1 :(得分:-1)

问题是我们一次导入数千条记录。在尝试插入之前检查是否存在行(我相信这是CakePHP的唯一验证工作方式)如果我尝试逐行保存它将使查询量增加一倍。我将删除列上的唯一约束,只插入所有行。插入新行后,我将为这些列添加唯一约束,然后删除约束。我认为这对我的情况很有效,因为我们计划每月只导入一次新记录。