0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelでデータベースのテーブル定義をしてみた

Last updated at Posted at 2024-10-12

前提

概要

メッセージなどを投稿できる掲示板を作るため、そのデータベース用テーブルを設定します。

参照

テーブル名:掲示板(boards):表示項目

  • 投稿者ID(user_id)
  • タイトル(title)
  • カテゴリ(category)
  • 本文(texts)
  • 掲載期限(date_expiry)

作業

  • 1.テーブル定義ファイルの生成
  • 2.テーブル定義
  • 3.データベースに適用

1-1.テーブル定義ファイルの生成(マイグレーションファイルの生成)

Laravelのコマンドを使ってファイルを生成します。
なお、今回はこの方法を使わず、別の方法(下記)を使いました。

コマンド例1
./vendor/bin/sail php artisan make:migration create_boards_table

or

コマンド例2
./vendor/bin/sail php artisan make:migration --create --table boards

コマンドの「boards」は定義したいテーブル名です。複数形にするのがLaravel流のようです。
例1は、生成されるファイル名を指定する方法です。ファイル名の最後は'_table'とするようです。これでテーブル定義用と認識され、その前の文字列をテーブル名として認識され、定義ファイルが生成されます。'create'のところは何でも良さそうです。新規の場合は'create'、項目追加の場合は'add_columns'とかテーブル定義の更新履歴が分かるようにしておくのが良さそうです。
例2は、コマンドでテーブル名だけ指定して、その後でファイル名を入力する方法です。

コマンド例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.テーブル定義

yyyy_mm_dd_hhmmss_create_boards_table.php(生成された状態:抜粋)
    public function up(): void
    {
        Schema::create('boards', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('boards');
    }

各項目の定義をします。以下のようにしてみました。

YYYY_MM_DD_hhmmss_create_boards_table.php(編集後:抜粋)
    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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?