CakePHPはModel, Controller, Viewの3要素から構成される。
- Database
データベースのテーブル名は複数形で定義する。例えばユーザ情報を保持するデータベースであればusersと複数形にする。 - Model
/app/models/以下に単数形で定義ファイルを置く。先ほどのusersテーブルに対する定義は/app/models/user.phpに記述する。ファイル名は単数形であることに注意。class User extends AppModel
- Controller
/app/controllers/以下に複数形+_controllerという定義ファイルを置く。usersテーブルに対するコントローラは/app/controllers/users_controller.phpとファイル名が複数形になることに注意。class UsersController extends AppController
- View
/app/views/以下に複数形のディレクトリを作成し、controllerが処理するための入り口ページを置く。先ほどのusers_controller.phpにindexページから入った時の処理を記述してあるならば、/app/views/users/index.ctpというファイルを置く。views下のディレクトリ名が複数形であることに注意。
見た目はviews以下のindex.ctpに従う
表示されるデータはcontrollers以下のusers_controller.phpに従う
データベースアクセスのための基本
データベースのテーブル1つに対してModelが1つ対応する
テーブル名は複数形で付け、idというprimary, auto_incrementのフィールドを準備する
例
Table: CakePHP の要素
| Database | users | profiles | diaries |
| Model | User | Profile | Diary |
| Controller | UsersController | ProfilesController | DiariesController |
| View | app/views/users/index.ctp | app/views/profiles/index.ctp | app/views/diaries/index.ctp |

Table: usersテーブル
| id | INT(10) | Primary key, auto_increment |
| username | VARCHAR(32) | |
| password | VARCHAR(32) |
| id | INT(10) | Primary key, auto_increment |
| user_id | INT(10) | users.idへの外部キー |
| hobby | VARCHAR(256) |
| id | INT(10) | Primary key, auto_increment |
| user_id | INT(10) | users.idへの外部キー |
| date | DATETIME | |
| content | TEXT(1000) |
- アソシエーションを定義する
- アソシエーションによりデータベーステーブルに定義した外部キーを使用してテーブル間のリレーションを構築できる。
usersにはprofilesが1つとdiariesが複数ぶら下がる構成とする場合models/user.phpに$hasOneと$hasManyを定義する。
データベースの命名規則がCakePHPのものに従っていればこれだけでOK。<?php class User extends AppModel { var $name = 'User'; var $hasOne = 'Profile'; var $hasMany = 'Diary'; } ?> - 続いてprofilesはusersにぶら下がっている(属している)ことを定義する。
models/profile.phpに$belongsToを記述する。<?php class Profile extends AppModel { var $name = 'Profile'; var $belongsTo = 'User'; } ?> - 同様にdiariesはusersにぶら下がっている(属している)ことを定義する。
models/diary.phpに$belongsToを記述する。<?php class Diary extends AppModel { var $name = 'Diary'; var $belongsTo = 'User'; } ?>
- アソシエーションによりデータベーステーブルに定義した外部キーを使用してテーブル間のリレーションを構築できる。
デバッグ
views/users/index.ctp内に
<?php debug($user, $showHTML=true, $showForm=false); ?>と書くと以下のように表示してくれる。
Array
(
[0] => Array
(
[User] => Array
(
[id] => 1
[username] => user1
[password] => password1
)
[Profile] => Array
(
[id] => 1
[user_id] => 1
[hobby] => 読書
)
[Diary] => Array
(
[0] => Array
(
[id] => 1
[user_id] => 1
[date] => 2009-02-20 14:22:06
[content] => テストです。
)
)
)
[1] => Array
(
[User] => Array
(
[id] => 2
[username] => user2
[password] => password2
)
[Profile] => Array
(
[id] => 2
[user_id] => 2
[hobby] => 映画鑑賞
)
[Diary] => Array
(
[0] => Array
(
[id] => 2
[user_id] => 2
[date] => 2009-02-19 14:22:17
[content] => はじめまして
)
[1] => Array
(
[id] => 3
[user_id] => 2
[date] => 2009-02-20 14:37:30
[content] => 2度目の更新です。
)
[2] => Array
(
[id] => 4
[user_id] => 2
[date] => 2009-02-21 14:37:45
[content] => 明日の予定は・・・
)
)
)
)
0 件のコメント:
コメントを投稿