CakePHP2.0のモデル

CakePHPは、命名規則通りにデータベースのテーブル名やモデル名を作成しておけば、ほとんどSQLを知らなくても、簡単にデータベースを使用することができます。今日は、モデルとデータベースの規約について調べてみます。

命名規則

1. モデルのクラス名は、単数形でキャメル記法です。(例:Person、BigPerson、MyDvdCollection)

2. モデルに対応するテーブル名は、複数形でアンダースコア記法です(例:people、big_people、my_dvd_collections)。

上記の例では、personsやbig_personsでも正解のようですが、Scaffoldで試してみたところ、peopleやbig_peopleでテーブルを作成していない場合エラーが表示されました。weblioで調べたところ『複数形のpersonsを用いるのは形式張った表現で、普通はpeopleを用いる』となっていますので、personsが不正解ということではないようですが、CakePHPでは不正解となります。この辺の命名規則に関しては、日本人には扱いづらい部分だと思います。(例:dataはdatumの複数形)。

3. それでは、試しに既存のデータベーステーブルをコピーして、big_persons名で作成してみます。次に、コントローラBigPersonController.phpを作成して、下記のように記述します。

app/Controller/BigPersonController.php

<?php
App::uses('AppController','Controller');
App::uses('AppModel','Model');
class BigPersonController extends AppController{
 public $scaffold;
}

4. ブラウザで確認してみます。下記のように『big_people名のテーブルがありません。』とエラーが表示されました。

5. big_personsのテーブルをbig_peopleにリネームして再度、ブラウザで確認してみます。命名規則通りに作成してあれば、モデルすら作成しなくても下記のようなページが生成されます。このへんは面白いですね。

6. 少し、寄り道しましたが、命名規則に戻ります。2個以上の単語で構成されるフィールド名は、アンダースコア記法です。(例:first_name)

7. hasMany、blongsTo、hasOneの中の外部キーは、デフォルトでは、関連するモデルの(単数形の)名前に_idを付けたものとして認識されます。

8. モデル間のhasAndBelongsToManyの関係で、使用されるjoinテーブルは、joinするテーブルに合わせて、アルファベット順(zebras_applesではなくて、apples_zebras)に並べた名前にする必要があります。

9. CakePHPの全てのテーブルは、それぞれそれぞれの列を一意に識別する単一フィールドのプライマリーキーが必要です。

10. CakePHPは複合主キーをサポートしませんので、joinテーブルのデータを直接操作したい場合は、直接queryを呼び出すか、通常のモデルのように振る舞えるように主キーを追加する必要があります。

 Modelクラス

11. CakePHPのモデルクラスは、大きく分けて3つの仕組みに別れています。1つはデータの入出力関係、2つめはこれらのデータの入出力を安全に行うためのバリデーション関係、そして、CakePHPの最大の特徴であるアソシエーションです。アソシエーションはデータ同士の関連性を具体化するための仕組みです。

AppModelクラス

12. モデルを作成する場合、基本的には、Modelクラスを直接extendsして行いますが、AppModelクラスを用いることで、アプリケーション内で使用するモデルについて、共通の機能を別のファイル内に記述しておくことが出来ます。AppModelクラスは、『app/Model/』内に、『AppModel.php』を作成して、Modelクラスをextendsするようにします。尚、『app/Model/』内に、AppModel.phpが見つからない場合は、cake/lib/Model/AppMolde.phpが呼び出されます。

本日は以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ