6

私はcakephpが初めてです。Cakephp で、単一のトランザクションで複数のモデルのコミットとロールバックを処理できるかどうかを知りたいです。私はこのようなことをしたい

<?php
function add(){
    $transaction = begintransaction;
    if(model1->save()){
        if(model2->save()){
            if(model3->save(){
            }
            else{
                $errorFlag['model3'] = "Error in model 3"; 
            }
        }
        else{
            $errorFlag['model2'] = "Error in model 2";
        }
    }
    else{
        $errorFlag['model3'] = "Error in model 3";
    }
    if(empty($errorFlag)){ //no error in saving the model
        $transaction->commit();
        $this->Session->setFlash(__('The form data with multiple model is saved', true)); 
    }
    else{   //error in saving the model
        $transaction->rollback();
        $this->Session->setFlash(__('The form data with multiple model is saved', true));
    }
}
?>
4

3 に答える 3

3

モデル1〜3に「多くの」または「属する」関係がある場合は、おそらく次を使用する必要があります。

$this->Model1->saveAll($this->data);

投稿されたすべてのモデルデータの検証と保存を1回のトランザクションで処理します。

于 2011-03-15T15:35:53.607 に答える
3

はい、できます。

$this->Model->begin(); // Start transaction
$this->Model->commit(); // Commit transaction
$this->Model->rollback(); // Rollback transaction

マニュアルもご覧ください。

于 2010-06-10T23:51:47.743 に答える
1

関連する場合、最も好ましい方法は Model::saveAll() です。

Model::query() などを使用する必要があるために saveAll() を使用できない場合は、次のようにします。

$this->ModelX->begin();
$this->Model1->query();
$this->Model2->query();
$this->ModelX->commit();

Cake 1.3 の時点では、begin/commit/rollback ステートメントを実行するときにどのモデルを使用しているかは問題ではありません。それらはすべて同じコードを実行し、モデル固有の副作用はありません。

于 2011-08-30T01:39:19.443 に答える