我需要做多个插入/更新,所以我提出了事务回滚,如果有任何问题。此外,我的应用程序应该更新记录,如果已经存在,并插入如果不存在。
所以首先我尝试使用唯一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();
}
提前感谢!
我使用MySQL的ON DUPLICATE KEY UPDATE
来处理这种情况。然而,CodeIgniter的ActiveRecord实现本身不支持这个,并且在这个线程中接受的答案是:
我如何在我的CodeIgniter模型中使用ON DUPLICATE KEY UPDATE ?
似乎死了。因此,考虑使用原始MySQL而不是ActiveRecord模式;这在CI开发人员中相当普遍(我不使用他们的AR实现)。