1

複数の挿入/更新を行う必要があるため、問題が発生した場合にロールバックするトランザクションを考え出しました。さらに、私のアプリケーションは、レコードがすでに存在する場合は更新し、存在しない場合は挿入する必要があります。

したがって、最初に、一意の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();
}

前もって感謝します!

4

1 に答える 1

2

私はMySQLを使用ON DUPLICATE KEY UPDATEしてそのケースを処理します。ただし、CodeIgniter の ActiveRecord 実装はこれをネイティブにサポートしておらず、このスレッドで受け入れられている回答:

CodeIgniter モデルで ON DUPLICATE KEY UPDATE を使用するにはどうすればよいですか?

死んでいるようです。したがって、ActiveRecord パターンの代わりに未加工の MySQL を使用することを検討してください。これは、CI 開発者の間ではかなり一般的です (私は彼らの AR の実装を使用していません)。

于 2011-08-08T11:41:09.580 に答える