Tips

【CakePHP3入門】外部キー制約のあるテーブルをbakeする #4

【CakePHP3入門】外部キー制約のあるテーブルをbakeする #4

1.はじめに

今回から掲示板作成に取り掛かります。せっかく第1回でbakeを使用したので、外部キー制約のあるテーブルにてbakeを行ってみたいと思います。

2.CakePHPの命名規約

bakeにてきちんと動作するプロジェクトを作成するには、CakePHPの命名規約に沿った形でテーブル名やカラム名を決定しなければいけません。
基本的なルールは以下の通りです。

● 基本的なテーブルの命名規約

・テーブル名
複数形、アンダースコア記法 (例.drinks hot_drinks cold_alcoholic_drinks)
・カラム名
複数単語の場合、アンダースコアで区切る (例.popping_sweet)

外部キーを作成する場合、追加のルールがあります。

● 外部キーを設定するカラムの命名規約

・参照する側のカラム名を”[参照テーブル名の単数形]_id“とする

実際の例は下記にて見ていきます。

3.テーブル作成

上述の規約に従いつつ、外部キーを使用したテーブルを作成していきます。
今回は3つのテーブルを作成していきます。

CakePHP4_1

①ユーザアカウント情報を保持するテーブル”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

にアクセスします。

CakePHP4_2

bakeがうまく出来ていれば、このような画面が表示されます。

New Contentをクリックしてみましょう。

CakePHP4_3

ThreadとAccountの部分がプルダウンで選択する形式になっています。
New ThreadとNew Accountにてスレッドとアカウントを作成すると、プルダウンのリストが出来上がります。

CakePHP4_4 CakePHP4_5 CakePHP4_6

6.おわりに

今回は、外部キーが設定されているテーブルをbakeした際の挙動を確認してみました。
この記事が皆さんなりのテーブル定義でプロジェクトをbakeするときに、少しでも手助けになればと思います。

次回はbakeされたソースファイルを確認していきたいと思います。

【第1回】簡易掲示板サイトを作ろう!
【第2回】MVCの基本を理解しよう!
【第3回】bakeしたサンプルの動きを確認する!
【第4回】外部キー制約のあるテーブルをbakeする ★本記事
【第5回】8月中予定…

 

WEBアプリケーション関連 人気連載リンク

基礎からPHPWEBアプリ解発を学ぶなら・・
PHP基礎 連載

より実践的なWEBアプリ開発講座!Bootstrap活用を学ぶなら・・
魁!小野の塾 連載

Recent News

Recent Tips

Tag Search