宝哥软件园

Thinkphp3.2中插入相同数据问题的完美解决方案

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

问题描述

今天使用TP3.2插入数据时,为了避免插入相同的数据(所谓相同的数据有相同的主键或唯一索引的相同字段),我创建的索引如下。主键索引是一个自增字段,不可能重复,也就是唯一索引可能重复。我希望如果uid、年份、月份和日期这三个字段相同,那么当前记录将被更新。

问题的解决方案

以前遇到这个问题的时候,我们知道MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO来解决。

使用复制密钥更新

在插入数据之前,表中只有一条记录,如下图所示

SQL语句如下:插入记录时,如果与表中已有记录相同,则更新更改文章的记录,否则插入记录。

插入“工作日志”(“uid”、“year”、“mounth”、“day”、“status ”)值(1,2016,6,3,1)开复制键更新“status ”=值(“status”),“updated _ ts ”=NOW();

使用替换成

代码如下:

执行以下代码,首先插入一段数据

替换为“工作日志”值(1,2016,6,2,1)的效果如下

再次执行下面的代码,上面插入的代码将被更新

替换为“工作日志”值(1,2016,6,2,5)的效果如下

重复密钥更新和替换成的区别

当出现相同的值时,按复制键更新是更新现有记录,替换为是删除以前的记录,然后插入新记录。

Thinkphp3.2中的解决方案

在Thinkphp3.2中,插入相同数据的问题由add()函数的第三个参数处理。

Model.class.PHP的add()方法调用Db.class.php的insert中的方法。在insert方法中,我们可以看到以下代码:

其中$replace恰好是add方法中的第三个参数。

以上文章完美解决了Thinkphp3.2中插入相同数据的问题,是边肖与大家分享的全部内容,希望能给大家一个参考和支持。

更多资讯
游戏推荐
更多+