前提
- Laravel Version11
- Docker for Windows Desktop
- Laravel Sail使用
- 過去記事「Laravelをインストールしてみた」の状態
概要
メッセージなどを投稿できる掲示板を作るため、そのデータベース用テーブルを設定します。
参照
テーブル名:掲示板(boards):表示項目
- 投稿者ID(user_id)
- タイトル(title)
- カテゴリ(category)
- 本文(texts)
- 掲載期限(date_expiry)
作業
- 1.テーブル定義ファイルの生成
- 2.テーブル定義
- 3.データベースに適用
1-1.テーブル定義ファイルの生成(マイグレーションファイルの生成)
Laravelのコマンドを使ってファイルを生成します。
なお、今回はこの方法を使わず、別の方法(下記)を使いました。
./vendor/bin/sail php artisan make:migration create_boards_table
or
./vendor/bin/sail php artisan make:migration --create --table boards
コマンドの「boards」は定義したいテーブル名です。複数形にするのがLaravel流のようです。
例1は、生成されるファイル名を指定する方法です。ファイル名の最後は'_table'とするようです。これでテーブル定義用と認識され、その前の文字列をテーブル名として認識され、定義ファイルが生成されます。'create'のところは何でも良さそうです。新規の場合は'create'、項目追加の場合は'add_columns'とかテーブル定義の更新履歴が分かるようにしておくのが良さそうです。
例2は、コマンドでテーブル名だけ指定して、その後でファイル名を入力する方法です。
./vendor/bin/sail php artisan make:migration --create --table boards
┌ What should the migration be named? ─────────────────────────┐
│ E.g. create_flights_table │
└──────────────────────────────────────────────────────────────┘
1-2.テーブル定義ファイルの生成(モデル定義ファイルなどいっさいがっさい生成)
上の方法はテーブル定義ファイルだけを生成するのですが、Laravelはテーブル定義ファイルだけでなく、モデル定義ファイルやコントローラーファイルなどいっさいがっさいを生成してくれる方法があります。
今回は、この方法を使いました。
./vendor/bin/sail php artisan make:model --all --resource Board
「Board」は作成したいモデル名です。先頭文字を大文字にするのが通常のようです。
「--all」はモデル定義ファイルの出力だけでなく、データベースのテーブル定義ファイルやコントローラーなど全部という意味です。全部のファイルを生成してくれますが、後で内容を定義する必要があります。
「--resource」はレコード挿入や更新・削除などの処理(動作の記述はありません)を生成してくれるので設定しました。
INFO Model [app/Models/Board.php] created successfully.
・・・
INFO Migration [database/migrations/yyyy_mm_dd_hhmmss_create_boards_table.php] created successfully.
・・・
いろいろ作成されました。
2.テーブル定義
public function up(): void
{
Schema::create('boards', function (Blueprint $table) {
$table->id();
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('boards');
}
各項目の定義をします。以下のようにしてみました。
public function up(): void
{
Schema::create('boards', function (Blueprint $table) {
$table->comment('掲示板');
$table->id();
$table->foreignId('user_id')->constrained()->comment('作成者ID');
$table->string('title', length: 100);
$table->string('category', length: 100)->nullable();
$table->string('texts', length: 800)->comment('メッセージ');
$table->date('date_expiry')->comment('掲載期限');
$table->timestamps();
});
}
public function down(): void
{
Schema::dropIfExists('boards');
}
}
- ->string('項目名', 長さ)
文字列項目用:VARCHAR型 - ->date('項目名')
日付項目用:DATE型 - ->foreignId('***')
他テーブルのid値を設定する項目用:BIG INT型
今回、'user_id'と設定しました。この場合、usersテーブルのid項目の値を設定するという意味です。
だけど、これだけだと単にデータ型がBIG INT型になるだけのようで、制約として設定されないので->constrained()も必要かも - ->constrained()
制約あり項目用 - ->comment('***')
テーブルや項目のコメント用。DB GUIツールなどで表示されます。 - ->nullable()
値がヌルでも良い項目用
3.データベースに適用
./vendor/bin/sail php artisan migrate