THINKPHP3.2.3 写入数据库时,使用“ON DUPLICATE KEY UPDATE” ,达成“存在即更新,不存在即插入” 的功能
可能会有很多同学在写入数据库时会遇到类似“如果存在,就更新,否则就新增一条记录”的要求。也见到过有人先查询一遍,然后再判断是否存在,然后再采用对应的方法处理,其实原生的sql语句insert就支持判断是否存在即更新,否则就插入。在语句最后使用“ON DUPLICATE KEY UPDATE”即可。
那么,在THINKPHP这种高度封装的框架里,应该怎么实现呢,可以看看下方案例:
首先,需要写入的表,必须有唯一索引的字段,该语句会自动根据唯一索引判断记录是否存在。
然后,在构建需要insert进表里的数据包时,必须包含唯一索引字段的数据。
使用add()方法向数据库插入数据时,增加option这个没啥用的参数。
再增加replace=‘xxx,xxx,xxx’ 这个有用的参数, 其中字符串里的xxx,代表如果该记录存在,即更新对应字段名的数据。用逗号分割开。 也可以直接放数组进去。
案例如下:
public function test(){
$shopid = 'test';
$itemShop_db = M('syncshopid','','DB_CONFIG');
$updateData= array(
'goodsid' => '352769',
'status' => 1,
'price' => '19.9',
'p_retime' => time(),
'shopid' => 2301,
'qty' => '29',
'q_retime' => time(),
);
$result = $itemShop_db->fetchsql(false)->add($updateData,$options=array(),$replace='qty,q_retime,status');
echo $result;
}