对于PHP开发者来说,ThinkPHP框架应该都知道,可以说是目前国产最流行、最受欢迎的PHP快速开发框架了。
小编今天正好要做一个小项目,客户要求可以导入csv数据,在导入的时候需要覆盖重复的数据,做为PHP的开发者都知道,如果是sql语句,我们可以使用replaceinto来代替insertinto,它会自动判断主键或唯一约束的字段是否重复,重复则覆盖,不重复则插入。
那么在ThinkPHP框架中,是否支持replaceinto呢?
小编仔细的看了一下ThinkPHP的源码,发现add和addAll方法中有如下定义:
从以上源码中可以看出,ThinkPHP是封装了replaceinto功能的,只是默认状态为关闭,所以,我们只需要在插入数据时启用它就好了。
那我们就来具体操作一下:
以phpmyadmin为例,比如我们有一张表,有三个字段,分别为id、title、date,我们给title字段的索引设置为唯一,如下图:
然后在写入数据的时候只需将最后一个参数设为true即可。
add方法如下:
D(table)-add($add_data,array(),true);
addAll方法如下:
D(table)-addAll($add_data,array(),true);
这样就可以在写入的时候覆盖重复的数据了。