在Thinkphp3.2中插入相同資料的解決方案

來源:互聯網
上載者:User
下面小編就為大家帶來一篇完美解決Thinkphp3.2中插入相同資料的問題。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

問題描述

今天在使用TP3.2插入資料的時候,為了避免插入相同的資料(所謂相同的資料,其主鍵相同或者是唯一索引的欄位相同),我建立的索引如,主鍵索引為自增欄位,不可能出現重複,即唯一索引可能會出現重複,我希望的是uid,year,mounth,day 這三個欄位出現相同的話,就更新目前記錄。

問題解決辦法

在之前面對這樣的問題的時候,我們知道,MySQL提供了ON DUPLICATE KEY UPDATE或者REPLACE INTO來解決。

使用ON DUPLICATE KEY UPDATE

插入資料之前,表中就一條記錄,如

SQL語句如下,當插入記錄時候,與表中已有記錄相同,則更新改條記錄,否則插入記錄。

INSERT INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 3, 1) ON DUPLICATE KEY UPDATE `status` = VALUES(`status`),`updated_ts` = NOW();

使用REPLACE INTO

代碼如下:

先執行如下代碼插入一條資料

REPLACE INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 2, 1)

效果如

再次執行如下代碼,就會更新上面插入的代碼

REPLACE INTO `work_log` (`uid`,`year`,`mounth`,`day`,`status`) VALUES(1, 2016, 6, 2, 5)

效果如

ON DUPLICATE KEY UPDATE與REPLACE INTO區別

當出現相同的值時候,ON DUPLICATE KEY UPDATE是更新已經存在的記錄,REPLACE INTO是刪除之前的記錄,然後插入新的記錄。

Thinkphp3.2中解決辦法

在Thinkphp3.2中,通過add()函數的第三個參數來處理插入相同資料的問題。

Model.class.PHP中add()方法,調用了Db.class.php中insert中方法,在insert方法中,我們可以看到有如下代碼:

其中$replace 正好是add方法中第三個參數。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.