2010-01-16 9 views
17

Kod kaydıçideki aktif kayıtları kullanarak bir satırı güncellemek istedim ve yalnızca bir alan değerini arttırmak istiyorum (alınan_qty = received_qty +1), Her zamanki sql bunu ama aktif kayıtları CodeIgniter'dakiCodeIgniter'in Active Record işlevlerini kullanarak bir MySQL deyimine bir deyim ekleyin

$update['received_qty'] = 'received_qty + 1'; 
$update['received_date'] = date("Y-m-d"); 
$this->db->where($where); 
$this->db->update('vrs_distribution', $update); 

kimseyi edemem olabilir aktif kayıtlarını kullanarak bunu nasıl biliyor?

cevap

37

olsa fıkra size uygun NEREDE Sen gerekir

$this->db->query('UPDATE vrs_distribution SET received_qty = received_qty + 1, received_date = CURDATE() WHERE id = ' . $id); 

değiştirmek için.

ActiveRecord, bir set(), where() ve diğer birçok yönteme yerleştirilen her şeyden kaçar. Hem nerede hem de set, boolean olan $ kaçış opsiyonunun üçüncü bir parametresini alabilir. FALSE olarak ayarlayın ve CodeIgniter hiçbir şeyden kaçmayacaktır, yani alan artışınız bir ip gibi ele alınmayacaktır. sıfır (Güncelleme) olarak ayarlanmış

-2

Oldukça yakın görünüyorsanız, CI'nin ActiveRecord'unda (veya bu konu için SQL'de) bir 'komutla bir artış' yoktur.

$update['received_qty']++; 
$update['received_date'] = date("Y-m-d"); 
$this->db->where($where); 
$this->db->update('vrs_distribution', $update); 
+0

Üzgünüz dostum var ama ActiveRecord, aksi belirtilmedikçe tüm girdileri bir dizgi olarak atıyor. –

+0

Geç kalmış olmalı ya da bara erken vurdum. Whoops. – Zack

2

Yoksa yapabilirsiniz: Bu çalışacaktır

0

durum

$this->db->set('IsCurrent', '0');  
$this->db->where('AcademicYearID',$academicYearId); 
$this->db->update('academicyear'); 
0

Sadece biraz farklı benzer bir soru soracaktım, ama sorun aynıydı: Bir ara ile bir tarih güncelleştirmek için gerekli (expiry_date = expiry_date + interval 3 month) ve Phil Sturgeon's answer sorunu çözdü.

Ancak, ne fark yine yazabilirsiniz yani tırnak olabilir alanlar için diziyi kullanabilirsiniz olmasıdır:

$this->db->set('received_qty', 'received_qty + 1', FALSE); 
$this->db->set('expired_date', 'CURDATE() + INTERVAL 10 DAY', FALSE); //extra example 1 
$update['received_date'] = date("Y-m-d"); 
$update['receiver'] = $receiver_name; //extra example 2 
$this->db->where($where); 
$this->db->update('vrs_distribution', $update); 

Nerede $this->db->last_query() çıktılayacaktır:

UPDATE `vrs_distribution` 
    SET `received_qty` = received_qty + 1, 
     `expiry_date` = CURDATE() + INTERVAL 10 DAY, #extra example 1 
     `received_date` = '2015-07-01 16:00:00', 
     `receiver` = 'strike_noir', #extra example 2 
    WHERE #where clause with backticks 

set()'un kullanıldığı alanların tırnak içermediğine dikkat edin ve ilk sırada görünün. Sorgulamanın geri kalanı backticks ("CodeIgniter protect the remaining fields") bırakıyor.

İlgili konular