CakePHP saveAll()带有唯一约束


CakePHP saveAll() w/ unique constraint

我正在开发一个应用程序,用户将从文本文件中导入几千条记录。我对表中的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忽略约束冲突?

谢谢你抽出时间。

这实际上取决于如何导入数据以及使用什么RDBMS。

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

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

问题是我们一次要导入数千条记录。在尝试插入之前检查一行是否存在(我相信CakePHP的唯一验证就是这样工作的),如果我试图逐行保存它,那么查询量将增加一倍。我将删除列上的唯一约束,只插入所有行。插入新行后,我将向这些列添加一个唯一的约束,然后删除该约束。我认为这对我来说会很好,因为我们计划每月只导入一次新记录。