可能会有很多同学在写入数据库时会遇到类似“如果存在,就更新,否则就新增一条记录”的要求。也见到过有人先查询一遍,然后再判断是否存在,然后再采用对应的方法处理,其实原生的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; }