我需要进行多次插入/更新,因此如果出现任何问题,我会提交回滚事务。此外,我的应用程序应该更新记录(如果已存在),如果没有则插入。
首先,我尝试使用唯一ID更新记录,如果它返回affected_rows = 0,我继续插入。
可能我会错过事务/受影响行中的某些内容,它总是会返回affected_rows = 0。
以下是代码:
$this->db->trans_start();
$this->db->where('order_id', $order_id);
$this->db->where('order_status', 'Active');
$this->db->update('orders', $order);
$this->db->where('order_id', $order_id);
$this->db->where('sku', $item_sku);
$this->db->update('order_items', $order_items);
$this->db->trans_complete();
if ($this->db->affected_rows()==0){
$this->db->trans_start();
$this->db->insert('orders', $order);
$this->db->insert('order_items', $order_items);
$this->db->trans_complete();
}
提前致谢!
答案 0 :(得分:2)
我使用MySQL的ON DUPLICATE KEY UPDATE
来处理这种情况。但是,CodeIgniter的ActiveRecord实现本身不支持这个,并且在这个帖子中接受了答案:
How would I use ON DUPLICATE KEY UPDATE in my CodeIgniter model?
似乎已经死了。因此,考虑使用原始MySQL而不是ActiveRecord模式;这在CI开发人员中相当普遍(我不使用他们的AR实现)。