2012-09-03 13 views
6

モデルを分離するために1つの "トランザクション"を持つことは可能ですか? タグを付けて投稿を挿入します。タグと投稿は2つの別々のモデルにあります。 トランザクションを処理するにはどうしたらいいですか? (以下のように:)Codeigniter 2つのモデルを持つ1つのトランザクション

$this->db->trans_start(); 
$this->post_model->insert('...'); 
$this->tags_model->insert('...'); 
$this->db->trans_complete(); 
+0

コードの問題はどこですか? – amd

答えて

5

モデルメソッドに他のトランザクションステートメントがない限り、サンプルコードは正常に動作するはずです。

ドキュメントを1として、あなたは$this->db->trans_start()TRUEを渡すことによってそれをテストすることができます

$this->db->trans_start(TRUE); 
// Queries/model calls 
$this->db->trans_complete(); 

if($this->db->trans_status() === FALSE) 
{ 
    // do something if it fails 
} 

は自動的に完了時にトランザクションをロールバックしますTRUEtrans_start()にを渡します。テーブルのauto_increment値(該当する場合)をチェックして、トランザクションが機能しているかどうかを調べることができます。

+0

私はこの場合、コントローラが1つしかないと思いますよね?このコードはコントローラの中に置かれます??? – Lykos

+0

@Lykosそうである必要はありません。これはあなたのモデルの方法でも可能です(現実的にそうすべきです)。コントローラでDBを直接操作している場合は、コントローラにDBコードの周りに配置されます。 – Brendan

+0

私はいつも私のモデルに自分のゴールを入れましたが、Tschempeが上で尋ねたように、それはいいですか? $ this-> db-> trans_start(); $ this-> post_model-> insert( '...'); $ this-> tags_model-> insert( '...');コントローラ内の 、一度に異なるDBテーブルにデータを挿入するには? – Lykos