仙台の山奥で自転車に乗ったり転んだり

愛車の GIOS でサイクリングしたりポタリングしたり、それをブログに記録してみたり。ロードバイクや自転車や坂のことを書いてみたり。ときたまプログラムのことを忘れないようにメモってみたり。

CakePHP

CakePHPで複合主キーと仲良くやる

CkaePHPのO/Rマッパー(?)は複合主キーに非対応なので、自前でCRUDを実装する前提の方がうまくいくと思います。 DataSourceクラスが便利なので、上手く使えば意外とスムーズに実装できたりできなかったり……。でも、せっかくだから自動化できる部分は活用し…

データベースの設定が混在している環境のテストケース

デフォルトのデータベースとして「MySQLのデータベースその1」を利用して、「MySQLのデータベースその2」や「Oracleのデータベース」なども混在して利用するという開発環境での話し。 この環境でデフォルトではない「Oracleのデータベース」を利用するモデル…

CakePHPからPostgreSQLの正規表現を利用する、きっと冴えたやり方

実際のとこ、かなり泥臭いやり方なので全然冴えてはいないところですが……。あるマスタのテーブルドには、番号体系の正規表現を保存した列がある。 ユーザは、入力したコードを番号体系の正規表現でパターンマッチングして、マスタから特定のレコードを検索す…

CakePHP のモデルで任意の SQL を実行するノウハウ

業務系のバックエンドをWebアプリケーションと連携するときなど、複合主キーで CakePHP が上手く操作できなくて、効率良く操作できないものかと悩んだ際のメモです。こんなやり方がいいのかは微妙ですが、復号主キーのテーブルを一つのモデルとして利用した…

生成されるSQLを確認

検索条件が複雑になったときに、デバッグのために生成されるSQLを確認したかっった。ので、処理を覗いて追ってみたら意外と単純ですぐに確認できた。 モデルの中だったら、こんな↓感じでWHERE句のSQLを生成できる。 $this->getDataSource()->conditions($con…

モデルのテストを(後から、ものぐさに)まとめて作成する

テストファーストという言葉を知らないぼくは、「プロジェクトの締切り間際になって」まとめてモデルを(ちゃんと)テストしたくなる。ユニットテストのコードを生成するだけであれば、↓のようにすぐできる。 $ cake/console/cake bake test Model -app app-…

Modelでなるべくシンプルなインクリメントを実行したい

CakePHP(1.3系)でなるべくシンプルな実装でインクリメントのみの単純な機能を実装したい……、としたら↓みたいな実装はベター? public function incrementPv($id) { $table = $this->getDataSource()->fullTableName($this); $query = "UPDATE {$table} SET…

バリデーションの(preg_match関数で)エラー

モデルのバリデーションで↓のようなエラーが発生したら、ルールが未定義かtypoしているかのどっちか。 Warning (2): preg_match() [function.preg-match]: Delimiter must not be alphanumeric or backslash [CORE/cake/libs/model/model.php, line 2506] 開…