【Laravel】掲示板を作成する(1)各種設定、マイグレーションでDBテーブルを作成
そろそろ Laravel で何かモノを作ってみたくなったので、CGIの基本中の基本である掲示板を作成してみたいと思います。
結構な数の段階を踏みながら作成したので、細切れにしながらポストする予定。
今回は「データベースの設定」と、「マイグレーションでデータベースのテーブルを作成」する方法です。
1.各種設定
プロジェクトデータベースの作成
まず最初にプロジェクトで使用するデータベースを作成します。これはフレームワーク(Laravel)で行うのではなく、SQLを発行して作成する必要があるようです。
今回使用するデータベース名は適当に「laravelpjt」として作成します。
作成方法の一例を挙げておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
-- MariaDBにログイン mysql -u root -p****** -- 掲示板用に「laravelpjt」という名前のユーザーとデータベースを作成 MariaDB [(none)]> CREATE DATABASE laravelpjt; MariaDB [(none)]> GRANT ALL PRIVILEGES ON laravelpjt.* to laravelpjt@localhost identified by 'password'; -- (一旦ログアウトして)作成したユーザでログイン mysql -u laravelpjt -ppassword MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | laravelpjt | | test | +--------------------+ 3 rows in set (0.00 sec) |
データベース設定
Laravelには .env
と config/database.php
というデータベースの設定ファイルが2つあります。
まずは \config\database.php
を確認します。
使用するデータベースは参考にしている本ではsqliteを使っていたのですが、やはり勝手知ったるMySQLにて制作してることにしました。
ということで下にはMySQLの設定を抜粋しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
'mysql' => [ 'driver' => 'mysql', 'url' => env('DATABASE_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravelpjt'), // データベース名 'username' => env('DB_USERNAME', 'laravelpjt'), // ユーザ名 'password' => env('DB_PASSWORD', 'password'), // パスワード 'unix_socket' => env('DB_SOCKET', ''), 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], |
envメソッドに注目。第1引数の定数が設定されているとそれを読み込み、設定されていなかったら第2引数の値を読み込みます。
第1引数の定数はプロジェクトディレクトリ直下にある .env
ファイルで指定しています。
ということで、envファイルを編集します。
編集ファイル:.env
1 2 3 4 5 6 7 8 9 |
DB_DATABASE=laravelbook DB_USERNAME=laravelbook DB_PASSWORD=4mG3TUnjwe6FGB2W // 元から設定されていたパスワード ↓↓↓↓↓ 以下に変更 ↓↓↓↓↓ DB_DATABASE=laravelpjt DB_USERNAME=laravelpjt DB_PASSWORD=password |
どちらのファイルに設定しても良いとのことですが、公式ドキュメントによると環境ごとに変わる情報(DBのログイン名とかパスワードなど)は基本的に.envファイルに記載するようとのことです。
キャッシュのクリア
.envファイルの中身を書き換えた場合は、必ず下記コマンドを実行してキャッシュをクリアします。
1 |
$ php artisan config:clear |
デバッグ機能を有効化する
エラーの原因を把握することができるよう、デバッグ機能をONにします。
編集ファイル:app/config/app.php
1 |
'debug' => env('APP_DEBUG', true), // false ⇒ trueに変更する |
※本番環境ではエラーの詳細情報をユーザに直接見せないために APP_DEBUG は false に設定します。
これでルーティングにメソッド名を指定し忘れたりした時などに詳しく何が起こっているのかを教えてくれるデバッグ画面が表示されるようになります。
エラー画面のキャプチャ
以下は実際にルーティングでミスったときのエラー内容です。
2.マイグレーションでデータベースのテーブルを作成
ここからデータベースのテーブルの作成に入ります。
posts, comments, categories という3つのテーブルを作成します。
テーブル名は複数形にするのがが命名規則のようです。
1 2 3 4 5 6 7 8 |
# (1)ポストテーブル $ php artisan make:migration create_posts_table # (2)カテゴリーテーブル $ php artisan make:migration create_categories_table # (3)コメントテーブル $ php artisan make:migration create_comments_table |
結果
1 2 3 4 5 6 7 |
# (1) $ php artisan make:migration create_posts_table # 作成されるとこのメッセージが表示されます Created Migration: 2020_06_16_115506_create_posts_table # 同様に(2)、(3)も実行する |
マイグレーションで作成されたファイルは app\database\migrations
に出力されます。
パスを確認すると下記3つのファイルが作成されていました。
- 2020_06_16_115506_create_posts_table.php
- 2020_06_16_115706_create_categories_table.php
- 2020_06_16_115714_create_comments_table.php
マイグレーションで生成されたファイルにカラムの情報を書き込む
投稿テーブル
テーブルの仕様通りに記述します。
編集ファイル:app/database/migrations/2020_06_16_115506_create_posts_table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('posts', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); // created_at, updated_atが自動設定されるとのこと $table->string('is_deleted', 4)->default('0'); $table->integer('category_id'); $table->string('subject'); $table->text('message'); $table->string('name'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('posts'); } } |
カテゴリテーブル
編集ファイル:app/database/migrations/2020_06_16_115706_create_categories_table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateCategoriesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('categories', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('is_deleted', 4)->default('0'); $table->string('name'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('categories'); } } |
コメントテーブル
編集ファイル:app/database/migrations/2020_06_16_115714_create_comments_table.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateCommentsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('comments', function (Blueprint $table) { $table->increments('id'); $table->timestamps(); $table->string('is_deleted', 4)->default('0'); $table->integer('post_id'); $table->string('name'); $table->text('comment'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('comments'); } } |
マイグレーションを実行してテーブルを作成
下記コマンドを発行してマイグレーションを実行します。
1 |
$ php artisan migrate |
結果
データベース『laravelpjt』に各種テーブルがcreateされました。
categories, comments, posts以外の見覚えのないテーブルは、デフォルトで作成されていたマイグレーションファイルが実行されたものの様です。とりあえずは気にせず進めることとします。
ひとまず、掲示板作成の第1回目はここまでとします。
参考にしたサイト様
https://www.hypertextcandy.com/laravel-tutorial-introduction
https://manablog.org/laravel_bulletin_board/