我想在codeigniter中使用活动记录更新一行,我只想增加一个字段值(received_qty = received_qty +1),我意识到我可以在通常的sql中做到这一点,但我不能在codeigniter活动记录中
$update['received_qty'] = 'received_qty + 1';
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);
有人知道如何使用有效记录吗?
答案 0 :(得分: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不会转义任何内容,这意味着您的字段增量不会被视为字符串。
答案 1 :(得分:2)
或者你可以这样做:
$this->db->query('UPDATE vrs_distribution SET received_qty = received_qty + 1, received_date = CURDATE() WHERE id = ' . $id);
您需要修改WHERE子句以适合您
答案 2 :(得分:0)
状态设置为零(更新)
$this->db->set('IsCurrent', '0');
$this->db->where('AcademicYearID',$academicYearId);
$this->db->update('academicyear');
答案 3 :(得分:0)
我打算问一个类似的问题,但问题是一样的:我需要用间隔(expiry_date = expiry_date + interval 3 month
)来更新日期,而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")。
答案 4 :(得分:-2)
你似乎非常接近,CI的ActiveRecord中没有'一个递增'命令(或者在SQL中没有)。
$update['received_qty']++;
$update['received_date'] = date("Y-m-d");
$this->db->where($where);
$this->db->update('vrs_distribution', $update);