2010-01-16 22 views
17

我想使用codeigniter中的活動記錄更新一行,並且我只想增加一個字段值(received_qty = received_qty + 1),我意識到我能做到這一點在通常的SQL,但我不能在笨活動記錄使用CodeIgniter的活動記錄函數在不帶引號的MySQL語句中添加一個子句

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

人知道如何使用活動記錄做呢?

回答

37

這將工作。

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

ActiveRecord將所有東西都放到set(),where()和其他許多方法中。 where和set都可以帶一個可選的第三個參數$ escape,它是一個布爾值。將其設置爲FALSE並且CodeIgniter不會轉義任何內容,這意味着您的字段增量不會被視爲字符串。 expiry_date = expiry_date + interval 3 month我需要更新的間隔日期(:

-2

你看起來非常接近,CI的ActiveRecord(或SQL中沒有「增加一個」命令)。

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

對不起,兄弟,但有,ActiveRecord只是作爲字符串轉義所有輸入,除非另有說明。 – 2010-01-19 14:32:11

+0

一定遲到了,或者我早點擊吧。哎呦。 – Zack 2010-01-22 18:46:30

2

或者,你可以這樣做:

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

你會需要修改WHERE子句,以適應你雖然

0

狀態設置爲零(更新)

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

我要問一個類似的問題,只是有一點點不同,但問題是相同的)和Phil Sturgeon's answer確實解決了這個問題。

不過,我意識到的是,你仍然可以使用,可以有引號領域的陣列,這意味着你可以寫:

$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); 

$this->db->last_query()將輸出:

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()的字段沒有引號並出現在第一位。查詢的其餘部分有反引號(讓「CodeIgniter protect the remaining fields」)。

相關問題