安価なシステム町工場的ソフトウェア屋のブログ新潟市で個人でコンピュータ相手にシステム開発をしています。確実、安く、素早くをモットーにやっています。システム開発の時に調べた技術を惜しみなく公開していきます。よろしくない業者についての苦言も為に吐きます。コンピュータにベッタリというのもどうかと思いますが、やはりこれからは、コンピュータのことを知らないよりは知っていたほうが良いと思いますよ。【備忘録】CakePHPトランザクション処理の仕方CakePHPでトランザクション処理のトランザクション処理の書き方をわかりやすくするためのコンポーネントとかを書いたのに別のプロジェクトをやった時に中途半端にロジックを書いてちゃんと動かなかったので忘れないようにするために記録しておきます。共通部品化できているの使いまわせると思います。アプリケーションを作る時どこでトランザクションを管理すべきかですが、やっぱりコントローラで管理するのが正しいと思っています。CakePHPの場合、DataSourceに対してトランザクションをかけるのですが、DataSourceはモデルが持っているので、イマイチなコーディングになっていまします。テーブルが1つの場合は、良いですが、複数のテーブルになった途端見た目がおかしなことになってしまいます。テーブル1つの場合トランザクションをかけたいテーブルが1つに明確なのでbeginの意味はわかりやすいです。$this->Table1->commit();テーブル2つの場合Table1のbegin()を実行した時点でデータソースに対してトランザクションがかかるので、Table2もトランザクション対象になります。見た目、Table2はトランザクション対象にならない感じがします。$this->Table1->commit();じゃぁ、どうするか!複数のテーブルにトランザクションをかける場合、明示的に使用するモデルを指定する方式をとります。トランザクション用のコンポーネントとモデルにトランザクション用のメソッドの追加をします。}}AppModel.phpモデルに対して、トランザクションの開始、commit、rollbackのメソッドを追加する。}}これは、CakePHPを使い始めてDBのトランザクションはどうやって扱ったら良いかというのを調査していたらあるサイト(今もあると思いますが忘れました)で一つの解として紹介されていたもものです。実際の所、ルールなので、複数テーブルにトランザクション処理をするときは、代表のテーブルに対してbegin、commit、rollbackをするということにすればいちいちこんなめんどくさいことをしなくても良いのですけどね。