CakePHPのModelで、既定のプライマリキーのデフォルトカラム名「id」を別のカラム名に変更したい

CakePHP2でテーブルへのINSERTをしていたのだが、どうも期待する動作にならずデータが上書きされるというUPDATE処理になっている。確認すると実際にUPDATEが実行されていた。Model::save()を使っているとプライマリキーを調べてから更新処理か新規作成処理かを判断するようなので、おそらくはプライマリキーが適切に扱われていないのだろう。そう想像する理由は、テーブル中にある「id」というカラム名はプライマリキーとして使われているカラムではなく別の利用がされていて、本当のプライマリキーはnoというカラムだった。CakePHPはデフォルトでプライマリキーのカラム名はidを指定しているはずなので、これをnoに変更したい。これは実に簡単だ。

プライマリキーをデフォルトから変更するにはモデルにメンバ変数を指定するだけだ。具体的には、testというテーブルのモデルはapp/Model/Test.phpに記載するが、この中に記載するTestクラスで、以下のように追加するだけでよい。

[php]
public $primaryKey = ‘no’;
[/php]

これでプライマリキーをデフォルトのidからnoに変更できる。

なお試したことはないが、プライマリキーを複数指定する必要がある場合には、

[php]
public $primaryKeyArray = array(‘id’, ‘no’);
[/php]

のようにすればいいようだ。

オープンソース徹底活用 CakePHP 2.1によるWebアプリケーション開発CakePHP2 実践入門 (WEB+DB PRESS plus)はじめてのCakePHP (I・O BOOKS)WebデザイナーのためのCakePHPビューコーディング入門詳解CakePHP辞典―2.0/2.1/2.2/2.3対応

コメントを残す

メールアドレスが公開されることはありません。