CakePHPでモデルを作ってみます。
モデルは、DBの入出力だけでなく、ファイル操作や通信処理などを一様に処理できるようなしくみを構築できるようになっています。また、DBと一口にいっても、MySQL、PostgreSQLやSQLiteなどさまざまなプラットフォームがありますが、それらの依存もモデルで吸収してくれるので、プログラマは特に気にせず作業することができます。
今回はMySQLとのインターフェースを自作してみます。
まずは、以前にCakePHPのインストールでも紹介したように、DBの設定がされていることを前提にします。ちなみに設定ファイルの場所は「/app/config/database.php」です。
次にモデルに対してテーブルを用意します。createもフレームワークでどうにかしてくれると思っていたのですが、テーブルの生成は手動なんですね。サンプルとして以下のようなcreate文でテーブルを用意します。
CREATE TABLE test_samples ( id VARCHAR(256) PRIMARY KEY , name VARCHAR(8) NOT NULL , date_update TIMESTAMP NOT NULL );
作成するモデル名を「Sample」とした場合、テーブル名は「samples」になります。最後に「s」をつけるルールなんですね。また、database.phpで「’prefix’ => ‘test_’」とプレフィックスを設定した場合に「test_samples」になります。
さらにPRIMARY KEYを設定した項目の名前を「id」に設定しないと、INSERTを実行した場合に、以下のアラートが表示されてしまいます。
Notice (8): Undefined index: id [CORE/cake/libs/model/model.php, line 1325]
キー項目を「id」にするのもルールのようです。
初めてだったので、これらのルールを知らずに、テーブルをcreateしてはdropの繰り返しで苦労しました。。。
さて、次にモデルを作成します。モデル名からファイルは「/app/models/sample.php」に作成するのがルールです。ソースの中身は、最低限、以下のコードを記述すればよいです。
class Sample extends AppModel { var $name = 'Sample'; }
最後に、動作確認のためにこのモデルをコントローラで使用してみます。
class TestController extends AppController { public $uses = array('Sample'); function index(){ $this->Sample->set(array( 'id' => '00000001', 'name' => 'My Name', 'date_update' => date("Y-m-d H:i:s") )); $this->Sample->save(); } }
他の処理は割愛しています。この処理にアクセス後、DBを確認すると、見事1レコード追加されていました。
今回はモデルの最低限の機能で実験してみましたが、モデルのしくみは奥が深いようです。
また便利な使い方を知ったら、書き留めたいと思います。