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 件のコメント:
コメントを投稿