1

同時に更新する必要がある2つのテーブル/モデル(相互に関係はありません)があり、どちらかが更新プロセスを完了できない場合、もう一方は更新されません... 。

やってみたら

if($this->model1->save($data))
   $this->model2->save($data)

model2が正常に保存されたかどうかに関係なく、model1は更新されます。

これは、2番目の保存アクションが失敗した場合に最初の保存アクションを元に戻すロールバック関数ですか

4

1 に答える 1

2

ロスのコメントで示唆されているように、トランザクションを明示的に開始してコミット/ロールバックすることができます。

しかし、CakePHPは、これをすぐにサポートしますsaveAssociated()。両方のモデルのデータを渡すことができます。

hasOneまたはbelongsToの関連付けを持つ関連レコードとともにレコードを保存するには、データ配列は次のようになります。

$data = array(
      'User' => array('username' => 'billy'),
      'Profile' => array('sex' => 'Male', 'occupation' => 'Programmer'),
);

$Article->saveAssociated($data);

atomicトランザクションの使用を制御するオプションがあります。

アトミック:true(デフォルト)の場合、単一のトランザクションですべてのレコードを保存しようとします。データベース/テーブルがトランザクションをサポートしていない場合は、falseに設定する必要があります。

一方のモデルの検証が失敗した場合、もう一方のモデルも保存されません。

データベースはトランザクションをサポートする必要があることに注意してください。MySQLの場合、InnoDBストレージエンジンのみがトランザクションをサポートしますが、MyISAMはサポートしません。MySQLストレージエンジンの比較を参照してください。

于 2013-01-09T16:27:32.133 に答える