2016-04-05 8 views
0

Tablodaki bir girişi güncellemek veya mevcut değilse eklemek istiyorum. affected_rows() işlevini kullanıyorum ancak veri değişmezse 0 döndürür ve bir yinelenen satır ekler. Bu kodu kullanıyorum

,

$datainsert = array(
    "vendor_id" => $vendor_id, 
    "c_date_time" => date('Y-m-d H:i:s') 
); 
$this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert); 
if ($this->db->affected_rows() == 0) { 
    $this->api_vendor_model->insert_vendor_login_time($datainsert); 
} 

ama hiçbir satır etkilenen durumunda çalışmaz ama bir giriş VENDOR_ID için vardır.

function update_vendor_login_time($vendor_id, $data) { 
    $this->db->where('vendor_id', $vendor_id); 
    $this->db->update('fa_vendor_login_time', $data); 
    $this->error_check(__FUNCTION__); 
} 
+0

'update_vendor_login_time()' işlevinin kod kodunu yapıştırın !! – Saty

+0

soru güncelleme kodu –

cevap

0

yerine kumandanın modeli dosya ve return TRUE or FALSE yılında $this->db->affected_rows() kontrol etmeniz gerekir. yinelenen girdiyi seçin sorgu

MODEL

function update_vendor_login_time($vendor_id, $data) { 
    $q = $this->db->select('id')// add your column nae here 
        ->from('fa_vendor_login_time') 
        ->where(array('vendor_id' => $vendor_id))->get(); 
    if ($q->num_rows() == 0) { 
     $this->db->where('vendor_id', $vendor_id); 
     $this->db->update('fa_vendor_login_time', $data); 
     $this->error_check(__FUNCTION__); 
     if ($this->db->affected_rows() > 0) { 
      return TRUE; 
     } else { 
      return FALSE; 
     } 
    }else{ 
     return TRUE; 
    } 
} 

CONTROLER

$insert = $this->api_vendor_model->update_vendor_login_time($vendor_id, $datainsert); 
if (!$insert) { 

    $this->api_vendor_model->insert_vendor_login_time($datainsert); 
} 
+0

ile düzenlenmiş ne fark eder? datainsert değerleri zaten mevcutsa ve bu nedenle yinelenen bir girişe –

+1

bir çift giriş ekleyecektir, yine de false döndürecektir http://stackoverflow.com/questions/13970942/how-to-prevent-duplicate-records-in-codeigniter – Saty

+0

bu yüzden güncelleme yapmadan önce bir sorgulama yapmak veya –

0

Hayır, böyle bir işlevi yoktur kullanarak kontrol etmek ihtiyacını kontrol etmek.

affected_rows() bu şekilde çalışır çünkü veritabanı böyle çalışır - aslında güncelleştirmediği satırlar için geri bildirim döndürmez. Bu çerçevenin kontrolünün dışında.

+0

Güncelleme veya ekleme öncesinde bir sorgulama sorgusu yapmaktan başka bir yol var mı? –

+1

Hayır, yok. – Narf