2016-09-22 8 views
-1

で関数アクションをロールバックすることは可能です例えばが、それはCodeIgniterの

、私はCodeIgniterの中で、2つの異なるテーブルにデータを挿入するためにwan'tとします

  • のUserProfileテーブルに挿入します。名前を、 へのメール(IDを取得し、次の表にそれを使用)

  • 挿入従業員テーブル:UserProfile_id、シフト位置。今まで

、すべては私がケースにロールバックすることができますどのように...私は両方の挿入がコミットされている場合にのみアクションをコミットしたい場合に何ができるのか、良い取り組んでいる最初の挿入がうまくいったと私ドン空のプロフィールがほしいとは思っていません.... 最初の挿入がコミットされたら、次の挿入時に何かがうまくいかなかったと思います。

+2

:あなたは私たちのこのアプローチ(私の意見)一つではなく、その唯一の/最高かどうかわからできる複数のモデルの場合

UPDATED

あなたの質問には関係ありません。 –

+0

更新された回答を参照してください@ user3387719 –

答えて

1

CodeIgniterの中Transactionsを参照してください。

構文(だけでなく文書で考える):

$this->db->trans_begin(); 

$this->db->query('AN SQL QUERY...'); 
$this->db->query('ANOTHER QUERY...'); 
$this->db->query('AND YET ANOTHER QUERY...'); 

if ($this->db->trans_status() === FALSE) 
{ 
     $this->db->trans_rollback(); 
} 
else 
{ 
     $this->db->trans_commit(); 
} 

使用することを確認します$ this-> DB-> trans_begin()、マニュアル トランザクションを実行するとき、NOTます$ this-> DB-> trans_start()。

strict-modeも参照してください。あなたがそのよう 'C'タグを削除する必要があります

// MODEL_x 

public function functionX($data) 
{ 
    return $this->db->insert('table_x',$data); 
} 
// MODEL_y 

public function functionY($data) 
{ 
    return $this->db->insert('table_y',$data); 
} 

//controller 
$this->db->trans_start(); 
$this->model_x->functionX(); 
$this->model_y->functionY(); 
$this->db->trans_complete(); 
if ($this->db->trans_status() === FALSE) { 
    //log error 
} 
1

はい、コードネイターのトランザクションを使用すると、クエリの両方またはすべてが正常に実行された場合にのみデータを挿入またはコミットするため、タスクを実行できます。

は、あなたが使用するトランザクションを使用してクエリを実行します$ this-> DB-> trans_start()とするために、ます$ this-> DB-> trans_complete()関数を次のように

$this->db->trans_start(); 
    $this->db->query('AN SQL QUERY...'); 
    $this->db->query('ANOTHER QUERY...'); 
    $this->db->query('AND YET ANOTHER QUERY...'); 
$this->db->trans_complete(); 

をだから、あなただけを$this->db->trans_start();$this->db->trans_complete();

参考間クエリをカバーする必要があります。https://www.codeigniter.com/user_guide/database/transactions.html

+0

ありがとうございますが、私は2つの異なるモデルで作業している場合は、それぞれのクエリが含まれています:EmployeeProfile(inserts profile)、EmployeeDetails(ユーザーの詳細を挿入します)メソッドで従業員コントローラから呼び出され、引数を受け取りモデルに渡します。 – user3387719

+0

これらのモデルを順番に呼び出したい場合は、トランザクション間で呼び出すことを試みてください&私に知らせてください – Zeeshan

+0

他の人を助ける答えとして – Zeeshan