1
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でマイグレーションファイルを作成する手順

Posted at

はじめに

以下はLaravelと連携しているデータベースにテーブルを作成する工程のメモになります

テーブルの名称について

テーブル名は一般的に以下のルールに沿って名称付けをされています
※必ず適用しなければならないルールではありません

  • スネークケース(snake_case)であること
  • 複数形であること(usersorders など)

マイグレーションファイルの作成

php artisan make:migration create_items_table

コマンドの説明

  • php artisan
    Laravelのコマンドラインインターフェース(CLI)ツールです。さまざまなLaravelの操作をコマンドで実行できます。
  • make:migration
    マイグレーションファイルを作成するためのコマンドです。
    make はファイルやクラスを作成するためのLaravelの機能
    migration はマイグレーションファイルを意味します。
  • create_items_table
    作成するマイグレーションファイルの名前です。通常、この名前はテーブルの作成や変更を示すために適切な名前をつけます。この場合、「items」テーブルを作成することを示しています。

コマンドの使い方(その他)

  • create_新規のテーブル名_table
    新しいテーブルの作成する
  • add_追加するカラム名_to_既存のテーブル名_table
    既存のテーブルにカラムを追加する
  • remove_削除したいカラム名_from_対象のテーブル名_table
    既存のテーブルからカラムを削除する
  • rename_既存のテーブル名_to_新しいテーブル名
    テーブル名の変更

マイグレーションファイルの編集方法

データベースの「構造」を定義するためのファイルです。これを使うことで、データベースのテーブルやカラムの作成、変更、削除などを簡単に管理できます

マイグレーションファイルの基本構造

マイグレーションファイルは主に2つのメソッド(関数)で構成されています:

  • up() メソッド
    データベースに対して行う変更を定義します。新しいテーブルを作成したり、既存のテーブルにカラムを追加したりする処理を記述します。
  • down() メソッド
    up() メソッドで行った変更を取り消すための処理を定義します。たとえば、テーブルを削除する処理などを記述します。

マイグレーションファイルの例

YYYY_ MM_DD_******_create_items_table.php
<?php

use Illuminate\Database\Migrations\Migration;
// Migration クラスを利用するために必要な宣言です
use Illuminate\Database\Schema\Blueprint;
// Blueprint クラスを利用するために必要な宣言です。
use Illuminate\Support\Facades\Schema;
// Schema ファサードを利用するために必要な宣言です。


class CreateItemsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->id(); 
            // 自動的に unsignedBigInteger('id') と primary() を追加
            $table->string('name'); // 名前を保存する文字列カラム
            $table->integer('quantity'); // 数量を保存する整数カラム
            $table->timestamps(); // 作成日と更新日を保存するカラム
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('items'); // items テーブルを削除
    }
}

マイグレーションファイル編集時の注意点

一般的にテーブルには一意の値を持つ主キー(Primary Key)が必要になります。

Laravelでは、id メソッドを使うのが一般的であり、自動的に id という名前のカラムを主キーとして設定します。

id以外を主キーとして扱いたい場合の例

YYYY_ MM_DD_******_create_items_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateItemsTable extends Migration
{
    public function up()
    {
        Schema::create('items', function (Blueprint $table) {
            $table->unsignedBigInteger('custom_id');  // 主キーとして使うカラム
            $table->string('name');
            $table->timestamps();

            $table->primary('custom_id');  // 主キーとして指定
        });
    }

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

メソッドの補足
  • unsignedBigInteger メソッド
    負の数(マイナスの数)は保存できず、0以上の数字だけが保存でき、
    18,446,744,073,709,551,615までの整数値を保存できます

  • primary メソッド
    テーブルの中で特定のカラムを「主キー」として設定します。

カラムを追加するマイグレーションを作成する

既存のテーブルにカラムを追加する場合は、以下で新しいマイグレーションファイルを作成します

php artisan make:migration add_column_to_table_name --table=table_name

  • add_column_to_table_name
    マイグレーションファイルの名前です
    カラムを追加する内容を示すような名前にします。

  • --table=table_name
    カラムを追加したいテーブルの名前を指定します

テーブルのカラムを作成するためのメソッド一覧

新しいカラムを追加するための例

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddBirthdateToUsersTable extends Migration
{
    /**
     * マイグレーションの実行
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            // 新しいカラムを追加
            $table->date('name');
        });
    }

    /**
     * マイグレーションのロールバック
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            // カラムを削除
            $table->dropColumn('birthdate');
        });
    }
}

マイグレーションファイルでは、テーブルの構造を定義するためにさまざまなメソッドを使用できます。

以下は、Laravelのマイグレーションファイルでよく使われるメソッドの例です

string (文字列のカラム)

$table->string('name');

text (長い文字列を保存できるカラム)

$table->text('description');

integer (整数値を保存できるカラム)

$table->integer('age');

unsignedBigInteger (符号なしの大きな整数のカラム)

$table->unsignedBigInteger('user_id');

boolean (真偽値(true または false)を保存できるカラム)

$table->boolean('is_active');

date (日付を保存できるカラム)

$table->date('birthdate');

timestamp (日付と時間を保存できるカラム)

$table->timestamp('created_at');

timestamps (created_at と updated_at の2つのカラムを同時に作成します)

$table->timestamps();

enum (定義した値だけを保存できるカラム)

$table->enum('status', ['pending', 'completed', 'cancelled']);

decimal (小数点を含む数値を保存できるカラム)

$table->decimal('price', 8, 2); // 8桁の数字(小数点以下2桁)

テーブルの変更に関するメソッド一覧

以下は既存のカラム名の変更や削除、テーブルの削除に関するメソッドです

renameColumn (カラムの名前を変更します)

$table->renameColumn('old_name', 'new_name');

dropColumn (既存のカラムを削除します)

$table->dropColumn('column_name');

dropIfExists (テーブルが存在する場合に削除します)

Schema::dropIfExists('table_name');

※テーブルが存在しない場合には何もせずに処理を終了します

外部キー制約の設定をするためのメソッド

外部キーは、あるテーブルのカラム(列)が、別のテーブルのカラム(通常は主キー)を参照するために使用されるキーです。この関係を設定することで、2つのテーブル間に関連性を持たせることができます。

マイグレーションファイルでの外部キー設定例

orders テーブルcustomers テーブルid カラムを参照する場合、マイグレーションファイルで外部キーを設定する方法は次のようになります。

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateOrdersTable extends Migration
{
    public function up()
    {
        Schema::create('orders', function (Blueprint $table) {
            $table->id(); // 主キー
            $table->unsignedBigInteger('customer_id'); // 外部キーを設定するカラム
            $table->foreign('customer_id') // 外部キー制約の設定
                  ->references('id') // 参照先のテーブルのカラム
                  ->on('customers'); // 参照先のテーブル名
            $table->timestamps(); // 作成日時と更新日時
        });
    }

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

外部キー設定についての補足

  • unsignedBigInteger
    外部キーのカラムは、通常、参照先のテーブルの主キーと同じ型にする必要があります。unsignedBigInteger は、一般的に id カラムに使用されます。

  • foreign メソッド: 外部キー制約を設定するために使用します。このメソッドで、参照先のテーブルとカラムを指定します

  • references メソッド
    どのカラムを参照するかを指定します。

  • on メソッド
    参照先のテーブル名を指定します。

マイグレーションを適用するコマンド

マイグレーションファイルをデータベースに適用するには、以下のコマンドを実行します。

php artisan migrate

※実行前にはデータベースとの接続が必要です

マイグレーションの実行後の適用確認

MySQL Workbenchなどを使用して事前に確認できるように接続しておくと便利です

コマンド実行時にエラーが発生する場合は、マイグレーションファイルのコードに誤りがあるか、すでにテーブルが存在するなどが考えられます

1
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
1
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?