【CakePHP3入門】外部キー制約のあるテーブルをbakeする #4
1.はじめに
今回から掲示板作成に取り掛かります。せっかく第1回でbakeを使用したので、外部キー制約のあるテーブルにてbakeを行ってみたいと思います。
2.CakePHPの命名規約
bakeにてきちんと動作するプロジェクトを作成するには、CakePHPの命名規約に沿った形でテーブル名やカラム名を決定しなければいけません。
基本的なルールは以下の通りです。
・テーブル名
複数形、アンダースコア記法 (例.drinks hot_drinks cold_alcoholic_drinks)
・カラム名
複数単語の場合、アンダースコアで区切る (例.popping_sweet)
外部キーを作成する場合、追加のルールがあります。
・参照する側のカラム名を”[参照テーブル名の単数形]_id“とする
実際の例は下記にて見ていきます。
3.テーブル作成
上述の規約に従いつつ、外部キーを使用したテーブルを作成していきます。
今回は3つのテーブルを作成していきます。
①ユーザアカウント情報を保持するテーブル”accounts”
サイトにログイン機能を持たせようとしているので、アカウント情報は別テーブルにて保持する。
②スレッド情報を保持するテーブル”threads”
ログイン後に遷移するページにて、スレッド一覧を表示する予定。この際、カテゴリで絞り込みが行えるようにしたい。
スレッドとスレッド内投稿を分離。
③投稿内容を保持するテーブル”contents”
外部キーを設定して、スレッド名をthreadsテーブル、投稿者をaccountsテーブルと結びつける。
こんな感じのことを考えています。
※SQL文、用意しておきました。”bulletinboard”データベースがあれば、これをコピペして実行してください。
/* テーブル作成 */ CREATE TABLE `bulletinboard`.`accounts` ( `id` INT NOT NULL AUTO_INCREMENT , `name` VARCHAR(20) NOT NULL , `password` VARCHAR(30) NOT NULL , `detail` VARCHAR(50) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB; CREATE TABLE `bulletinboard`.`threads` ( `id` INT NOT NULL AUTO_INCREMENT , `title` VARCHAR(30) NOT NULL , `categories` VARCHAR(15) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB; CREATE TABLE `bulletinboard`.`contents` ( `id` INT NOT NULL AUTO_INCREMENT , `thread_id` INT NOT NULL , `created_at` DATE NOT NULL , `account_id` INT NOT NULL , `subject` VARCHAR(15) NOT NULL , `text_body` VARCHAR(100) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB; /* インデックス */ ALTER TABLE `bulletinboard`.`contents` ADD INDEX(`thread_id`); ALTER TABLE `bulletinboard`.`contents` ADD INDEX(`account_id`); /* 外部キー設定 */ ALTER TABLE `bulletinboard`.`contents` ADD FOREIGN KEY (`thread_id`) REFERENCES `bulletinboard`.`threads`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT; ALTER TABLE `bulletinboard`.`contents` ADD FOREIGN KEY (`account_id`) REFERENCES `bulletinboard`.`accounts`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;
4.プロジェクトをbakeする
テーブルの準備が整いましたので、新規プロジェクトをbakeしていきましょう。基本的には、第1回でやった内容と一緒です。
composerがインストールされている前提で話を進めます。
①XAMPPシェルにて以下の操作を行う
cd htdocs php composer.phar create-project --prefer-dist cakephp/app bulletin
②app.phpの編集を行う(DBの指定とアカウント設定) ※忘れずに!
③XAMPPシェルに戻って以下の操作を行う
cd bulletin php bin/cake.php bake all contents php bin/cake.php bake all threads php bin/cake.php bake all accounts
DB接続の設定がうまくいってさえいれば、これで目的のプロジェクトが完成するはずです。
5.プロジェクトの確認
では出来上がったプロジェクトを確認してみましょう。
localhost/bulletin/contents
にアクセスします。
bakeがうまく出来ていれば、このような画面が表示されます。
New Contentをクリックしてみましょう。
ThreadとAccountの部分がプルダウンで選択する形式になっています。
New ThreadとNew Accountにてスレッドとアカウントを作成すると、プルダウンのリストが出来上がります。
6.おわりに
今回は、外部キーが設定されているテーブルをbakeした際の挙動を確認してみました。
この記事が皆さんなりのテーブル定義でプロジェクトをbakeするときに、少しでも手助けになればと思います。
次回はbakeされたソースファイルを確認していきたいと思います。
【第1回】簡易掲示板サイトを作ろう!
【第2回】MVCの基本を理解しよう!
【第3回】bakeしたサンプルの動きを確認する!
【第4回】外部キー制約のあるテーブルをbakeする ★本記事
【第5回】8月中予定…
WEBアプリケーション関連 人気連載リンク
基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載
より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載