更新:2024/12/02

【Laravel10】Schema::create と Schema::tableの使い方について

はるか
はるか
Laravelのマイグレーション。Schema::createとSchema::table、違い分かる?
ふゅか
ふゅか
もちろん!Schema::createは新しいテーブルを作るとき、Schema::tableは既存のテーブルを変更するときに使うのよ!具体例も知りたい?

1. Schema::createとSchema::table

Schema::createSchema::table は、Laravelマイグレーション機能で使用されるメソッドです。それぞれ、データベース内のテーブルを新しく作成したり、既存のテーブルを変更したりするために使われます。この記事では、Laravel10を利用して、両者の違いや基本的な使い方についてわかりやすく解説します。

2. Schema::createとは?

Schema::create は、新しいテーブルを作成するために使用します。このメソッドは、テーブルの構造(カラムやインデックスなど)を指定する関数を受け取ります。

2.1. 基本構文

Schema::create('テーブル名', function (Blueprint $table) {
    $table->カラム型('カラム名');
});
ふゅか
ふゅか
Schema::createでは、新しいテーブルを作れるわ。例えば、ユーザーデータを管理するテーブルを作るなら、こんな感じね。

2.2. 例: ユーザー情報を格納するテーブルを作成

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

return new class extends Migration
{
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id(); // 主キー
            $table->string('name'); // ユーザー名
            $table->string('email')->unique(); // メールアドレス(ユニーク制約)
            $table->timestamps(); // created_at と updated_at
        });
    }

    public function down()
    {
        Schema::dropIfExists('users'); // テーブルを削除
    }
}

ポイント:

  • up メソッドでテーブルを作成し、down メソッドでそれを削除します。
  • Blueprint オブジェクト $table を使って、カラムやインデックスなどを定義します。

3. Schema::tableとは

ふゅか
ふゅか
Schema::tableは、既存のテーブルをカスタマイズするためのメソッドよ。

3.1. 概要

Schema::table は、既存のテーブルを変更するために使用します。新しいカラムを追加したり、既存のカラムを修正したりする際に便利です。

3.2. 基本構文

Schema::table('テーブル名', function (Blueprint $table) {
    $table->カラム型('カラム名');
});

3.3. 例:  users テーブルに新しいカラムを追加

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

return new class extends Migration
{
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->text('profile')->nullable(); // プロフィール情報を格納
        });
    }

    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('profile'); // カラムを削除
        });
    }
}

ポイント:

  • 新しいカラムを追加する場合や、既存のカラムを削除または変更する場合に使います。
  • カラムの変更(型の変更など)は doctrine/dbal ライブラリのインストールが必要な場合があります。

4. 両者の違い

項目 Schema::create Schema::table
目的 新しいテーブルの作成 既存のテーブルの変更
使用タイミング 新しいデータモデルを追加するとき 既存のデータ構造を修正するとき
主な用途 テーブル全体の構造を定義 特定のカラムやインデックスを操作
はるか
はるか
Schema::createは新規、Schema::tableは編集。

5. マイグレーションの操作例

5.1. 複数のカラムを一括で追加(Schema::create)

新しいテーブルを作成し、そのテーブルに複数のカラムを一度に追加するには、Schema::createメソッドを使用します。以下の例では、productsというテーブルを作成し、いくつかのカラムを定義しています。

Schema::create('products', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->decimal('price', 8, 2);
    $table->integer('stock');
    $table->timestamps();
});

5.2. 複数のカラムを追加・削除(Schema::table)

既存のテーブルに新しいカラムを追加したり、不要なカラムを削除したりするには、Schema::tableメソッドを使用します。以下の例では、productsテーブルに新しいカラムを追加し、不要なカラムを削除しています。

Schema::table('products', function (Blueprint $table) {
    $table->boolean('is_active')->default(true); // 新規カラムを追加
    $table->dropColumn('stock'); // 不要なカラムを削除
});

6. Schemaクラスのその他のメソッド

6.1. テーブルの削除

不要になったテーブルを削除したい場合は、Schema::dropIfExistsメソッドを使用します。このメソッドは、指定したテーブルが存在する場合のみ削除を実行します。

Schema::dropIfExists('テーブル名');

6.2. テーブルが存在するか確認

特定のテーブルがデータベース内に存在するかを確認するには、Schema::hasTableメソッドを使用します。以下はその例です。

if (Schema::hasTable('users')) {
    // テーブルが存在する場合の処理
}

例えば、usersテーブルを削除したい場合は、以下のように書きます。

Schema::dropIfExists('users');

6.3. カラムの存在を確認

特定のテーブル内に指定したカラムが存在するかを確認する場合は、Schema::hasColumnメソッドを使用します。以下はその例です。

if (Schema::hasColumn('users', 'email')) {
    // emailカラムが存在する場合の処理
}
PR