1

我需要进行多次插入/更新,所以我想出了事务以在出现任何问题时回滚。此外,如果已经存在,我的应用程序应该更新记录,如果不存在则插入。

所以首先我尝试使用唯一的 id 更新记录,如果它返回受影响的行 = 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();
}

提前致谢!

4

1 回答 1

2

我使用 MySQLON DUPLICATE KEY UPDATE来处理这种情况。但是,CodeIgniter 的 ActiveRecord 实现本身并不支持这一点,并且该线程中接受的答案是:

如何在我的 CodeIgniter 模型中使用 ON DUPLICATE KEY UPDATE?

好像已经死了。所以,考虑只使用原始 MySQL 而不是 ActiveRecord 模式;这在 CI 开发人员中相当普遍(我不使用他们的 AR 实现)。

于 2011-08-08T11:41:09.580 回答