私は次のことを行うこの機能を持っています
function save($owner,$data){
///$owner='00002';$data=[['type1','value1'],['type','value2']];
///check if this $data is already in database, if +ve and != then update else insert
$sel='';$rs=[];$ins=FALSE;$up=FALSE;$end=[];
$this->db->select('id,type,value')->where('owner',$owner)
//building WHERE statment
foreach(array_keys($data)as $k)
$sel.="type='$k' OR ";
$this->db->where("(".trim($sel,' OR ').")");
$r=$this->db->get('settings');
if($r->num_rows() > 0)//building reference array
foreach($r->result() as $r)$rs[$r->type]=$r;
foreach($data as $t=>$v)
{
if(isset($rs[$t])){//case input already in db-->update
if(!$v || $v!=$rs[$t]->value)$up[]=['id'=>$rs[$t]->id,'value'=>$v,'archived'=>0];
}else{//case not-->insert
if($v)$ins[]=['type'=>$t,'value'=>$v,'owner'=>$owner];
}
}
$this->db->insert_batch('settings',$ins);
$this->db->update_batch('settings',$up,'id');
}
insert_batch と update_patch の両方が機能していることを確認する方法と、更新されたフィールドの数を返す方法.. db->affected_rows() を使用してみましたが、2 つのステートメントを使用しているため、その戻り値は正確ではありません。
何か案は?