介绍
介绍
今天福哥带着大家给TFPHP框架的TFDO对象添加一个很棒的方法——upsert。所谓的upsert其实是两个单纯融合到一起的一个伪单词,这两个单词分别为update和insert,这是两个完全不同的操作,那么upsert方法如何将这两个操作结合到一起的呢?
首先我们了解一下upsert的最终目的,它的最终目的就是要保证数据表当中有一条包含指定数据的记录。这里面有个问题,如果要执行update操作的话当原记录不存在就会失败,如果要执行insert操作的话只能执行一次。最好的办法就是先尝试去update一下,如果发现失败了再执行insert操作,这样可以保证数据一定可以写入到数据表当中。
然后要实现upsert方法必须满足一个前提条件 ,就是目标更新的记录必须是通过主键字段或者约束字段实现的,换言之更新的记录只能是一条满足条件,这个很重要!
最后了解了upsert的工作原理,现在我们就要给TFDO对象增加upsert这种便捷的功能方法了!
TFDO
路径
TFPHP\Database\SQL\TFDO
方法
upsert
public function upsert(string $table,array $data,?array $dataType,array $keyData,?array $keyDataType):bool{ $a=""; $b=array(); foreach($data as $c=>$d){ $e="str"; if($dataType[$c]!=""){ $e=$dataType[$c]; } $a.=" AND ".$c." = @".$e; $b[]=$d; } if($a!=""){ $a=substr($a,5); } $f=$this->update($table,$data,$dataType,$a,$b); if(!$f){ return false; } $g=$this->getLastEffectedRows(); if($g>0){ return true; } foreach($keyData as $c=>$h){ $data[$c]=$h; if($keyDataType[$c]!=""){ $dataType[$c]=$keyDataType[$c]; } } $f=$this->insert($table,$data,$dataType); if(!$f){ return false; } return true; }
讲解
TFDO
upsert
这个upsert函数的原理福哥要详情讲讲 ,大家仔细听好了!
首先必须保证更新记录的条件是主键字段或者约束字段,所以增加了$keyData条件参数
其次进入函数先尝试去update数据 ,并通过lastEffectedRows判断更新操作是否有数据被更改了
最后如果有数据被更改了就直接返回成功就好了,如果没有就通过insert语句插入这条记录
使用
代码
总结
福哥今天带着童鞋们给TFPHP框架的TFDO对象增加了upsert方法,这个方法比较神奇的是可以直接对一个数据记录进行更新操作,无论这条记录是否存在都可以更新成功!这个方法非常适合对对象附属数据表进行更新操作,大大简化了编写带的量。
下一课 ,福哥会带着童鞋们给TFPHP框架的TFModel对象也增加upsert方法,因为在实际开发当中操作数据库都是通过模型完成的~~