Readouble

Laravel 11.x マイグレーション

イントロダクションIntroduction

マイグレーションはデータベースのバージョン管理のようなもので、チームがアプリケーションのデータベーススキーマを定義および共有できるようにします。ソース管理から変更を取得した後に、ローカルデータベーススキーマにカラムを手作業で追加するようにチームメートに指示する必要があったことを経験していれば、データベースのマイグレーションにより解決される問題に直面していたのです。Migrations are like version control for your database, allowing your team to define and share the application's database schema definition. If you have ever had to tell a teammate to manually add a column to their local database schema after pulling in your changes from source control, you've faced the problem that database migrations solve.

LaravelのSchemaファサードは、Laravelがサポートするすべてのデータベースシステムに対し、テーブルを作成、操作するために特定のデータベースに依存しないサポートを提供します。通常、マイグレーションはこのファサードを使用して、データベースのテーブルとカラムを作成および変更します。The Laravel Schema facade[/docs/{{version}}/facades] provides database agnostic support for creating and manipulating tables across all of Laravel's supported database systems. Typically, migrations will use this facade to create and modify database tables and columns.

マイグレーションの生成Generating Migrations

make:migration Artisanコマンドを使用して、データベースマイグレーションを生成します。新しいマイグレーションは、database/migrationsディレクトリに配置されます。各マイグレーションファイル名には、Laravelがマイグレーションの順序を決定できるようにするタイムスタンプを含めています。You may use the make:migration Artisan command[/docs/{{version}}/artisan] to generate a database migration. The new migration will be placed in your database/migrations directory. Each migration filename contains a timestamp that allows Laravel to determine the order of the migrations:

php artisan make:migration create_flights_table

Laravelは、マイグレーションの名前からテーブル名と新しいテーブルを作成しようとしているかを推測しようとします。Laravelがマイグレーション名からテーブル名を決定できる場合、Laravelは生成するマイグレーションファイルへ指定したテーブル名を事前に埋め込みます。それ以外の場合は、マイグレーションファイルのテーブルを手作業で指定してください。Laravel will use the name of the migration to attempt to guess the name of the table and whether or not the migration will be creating a new table. If Laravel is able to determine the table name from the migration name, Laravel will pre-fill the generated migration file with the specified table. Otherwise, you may simply specify the table in the migration file manually.

生成するマイグレーションのカスタムパスを指定する場合は、make:migrationコマンドを実行するときに--pathオプションを使用します。指定したパスは、アプリケーションのベースパスを基準にする必要があります。If you would like to specify a custom path for the generated migration, you may use the --path option when executing the make:migration command. The given path should be relative to your application's base path.

lightbulb Note: マイグレーションのスタブはスタブのリソース公開を使用してカスタマイズできます。[!NOTE]
Migration stubs may be customized using stub publishing[/docs/{{version}}/artisan#stub-customization].

マイグレーションの圧縮Squashing Migrations

アプリケーションを構築していくにつれ、時間の経過とともに段々と多くのマイグレーションが蓄積されていく可能性があります。これにより、database/migrationsディレクトリが数百のマイグレーションで肥大化する可能性があります。必要に応じて、マイグレーションを単一のSQLファイルに「圧縮」できます。利用するには、schema:dumpコマンドを実行します。As you build your application, you may accumulate more and more migrations over time. This can lead to your database/migrations directory becoming bloated with potentially hundreds of migrations. If you would like, you may "squash" your migrations into a single SQL file. To get started, execute the schema:dump command:

php artisan schema:dump

# 現在のデータベーススキームをダンプし、既存のマイグレーションをすべて整理する..
php artisan schema:dump --prune

このコマンドを実行すると、Laravelはアプリケーションのdatabase/schemaディレクトリへ、「スキーマ」ファイルを書き出します。スキーマファイルの名前は、データベース接続に対応します。これで、データベースをマイグレーションするとき、他のマイグレーションを実行していなければ、まずLaravelは使用しているデータベース接続のスキーマファイル内のSQLステートメントを実行します。スキーマファイルのSQL文を実行した後、Laravelはスキーマダンプ以外の、残りのマイグレーションを実行します。When you execute this command, Laravel will write a "schema" file to your application's database/schema directory. The schema file's name will correspond to the database connection. Now, when you attempt to migrate your database and no other migrations have been executed, Laravel will first execute the SQL statements in the schema file of the database connection you are using. After executing the schema file's SQL statements, Laravel will execute any remaining migrations that were not part of the schema dump.

アプリケーションのテストで、ローカル開発時に通常使用するものとは異なるデータベース接続を使用する場合、そのデータベース接続を使用してスキーマファイルをダンプし、テストでデータベースを構築できるようにする必要があります。この作業は、ローカル開発で通常使用するデータベース接続をダンプした後に行うとよいでしょう。If your application's tests use a different database connection than the one you typically use during local development, you should ensure you have dumped a schema file using that database connection so that your tests are able to build your database. You may wish to do this after dumping the database connection you typically use during local development:

php artisan schema:dump
php artisan schema:dump --database=testing --prune

チームの新しい開発者がアプリケーションの初期データベース構造をすばやく作成できるようにするため、データベーススキーマファイルはソース管理にコミットすべきでしょう。You should commit your database schema file to source control so that other new developers on your team may quickly create your application's initial database structure.

warning Warning! マイグレーションの圧縮は、MariaDB、MySQL、PostgreSQL、SQLiteデータベースでのみ利用可能で、データベースのコマンドラインクライアントを利用しています。[!WARNING]
Migration squashing is only available for the MariaDB, MySQL, PostgreSQL, and SQLite databases and utilizes the database's command-line client.

マイグレーションの構造Migration Structure

マイグレーションクラスには、updownの2つのメソッドを用意します。upメソッドはデータベースに新しいテーブル、カラム、またはインデックスを追加するために使用します。downメソッドでは、upメソッドによって実行する操作を逆にし、以前の状態へ戻す必要があります。A migration class contains two methods: up and down. The up method is used to add new tables, columns, or indexes to your database, while the down method should reverse the operations performed by the up method.

これらの両方のメソッド内で、Laravelスキーマビルダを使用して、テーブルを明示的に作成および変更できます。Schemaビルダで利用可能なすべてのメソッドを学ぶには、ドキュメントをチェックしてください。たとえば、次のマイグレーションでは、flightsテーブルが作成されます。Within both of these methods, you may use the Laravel schema builder to expressively create and modify tables. To learn about all of the methods available on the Schema builder, check out its documentation[#creating-tables]. For example, the following migration creates a flights table:

<?php

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

return new class extends Migration
{
    /**
     * マイグレーションの実行
     */
    public function up(): void
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('airline');
            $table->timestamps();
        });
    }

    /**
     * マイグレーションを戻す
     */
    public function down(): void
    {
        Schema::drop('flights');
    }
};

マイグレーション接続の指定Setting the Migration Connection

マイグレーションがアプリケーションのデフォルトのデータベース接続以外のデータベース接続を操作する場合は、マイグレーションの$connectionプロパティを設定する必要があります。If your migration will be interacting with a database connection other than your application's default database connection, you should set the $connection property of your migration:

/**
 * マイグレーションが使用するデータベース接続
 *
 * @var string
 */
protected $connection = 'pgsql';

/**
 * マイグレーションの実行
 */
public function up(): void
{
    // ...
}

マイグレーションの実行Running Migrations

未処理のマイグレーションをすべて実行するには、migrate Artisanコマンドを実行します。To run all of your outstanding migrations, execute the migrate Artisan command:

php artisan migrate

これまでどのマイグレーションが実行されているかを確認したい場合は、migrate:status Artisanコマンドを使用してください。If you would like to see which migrations have run thus far, you may use the migrate:status Artisan command:

php artisan migrate:status

マイグレーションが実行するSQL文を実際に実行せずに確認したい場合は、migrateコマンドに--pretendフラグを指定してください。If you would like to see the SQL statements that will be executed by the migrations without actually running them, you may provide the --pretend flag to the migrate command:

php artisan migrate --pretend

マイグレーションの排他実行Isolating Migration Execution

アプリケーションを複数のサーバに分散配置し、デプロイプロセスの一環としてマイグレーションを実行する場合、おそらく2つのサーバで同時にデータベースマイグレーションの実行は避けたいでしょう。これを避けるには、migrateコマンド実行時に、isolatedオプションを使用してください。If you are deploying your application across multiple servers and running migrations as part of your deployment process, you likely do not want two servers attempting to migrate the database at the same time. To avoid this, you may use the isolated option when invoking the migrate command.

isolatedオプションを指定すると、Laravelはアプリケーションのキャッシュドライバを使用してアトミックロックを取得してから、マイグレーションを実行しようとします。ロックがかかっている間、他のすべてのmigrateコマンドの実行はできません。When the isolated option is provided, Laravel will acquire an atomic lock using your application's cache driver before attempting to run your migrations. All other attempts to run the migrate command while that lock is held will not execute; however, the command will still exit with a successful exit status code:

php artisan migrate --isolated

warning Warning! この機能を利用するには、アプリケーションでmemcachedredisdynamodbdatabasefilearrayキャッシュドライバをアプリケーションのデフォルトキャッシュドライバとして使用する必要があります。さらに、すべてのサーバから同じセントラルキャッシュサーバと通信する必要があります。[!WARNING]
To utilize this feature, your application must be using the memcached, redis, dynamodb, database, file, or array cache driver as your application's default cache driver. In addition, all servers must be communicating with the same central cache server.

本番環境におけるマイグレーション強制Forcing Migrations to Run in Production

一部のマイグレーション操作は破壊的です。つまり、データーが失われる可能性を持っています。本番データベースに対してこれらのコマンドを実行しないように保護するために、コマンドを実行する前に確認を求めるプロンプトが表示されます。プロンプトなしでコマンドを強制的に実行するには、--forceフラグを使用します。Some migration operations are destructive, which means they may cause you to lose data. In order to protect you from running these commands against your production database, you will be prompted for confirmation before the commands are executed. To force the commands to run without a prompt, use the --force flag:

php artisan migrate --force

マイグレーションのロールバックRolling Back Migrations

最新のマイグレーション操作をロールバックするには、rollback Artisanコマンドを使用します。このコマンドは、マイグレーションの最後の「バッチ」をロールバックします。これは、複数のマイグレーションファイルを含む場合があります。To roll back the latest migration operation, you may use the rollback Artisan command. This command rolls back the last "batch" of migrations, which may include multiple migration files:

php artisan migrate:rollback

rollbackコマンドにstepオプションを提供することにより、限られた数のマイグレーションをロールバックできます。たとえば、次のコマンドは最後の5つのマイグレーションをロールバックします。You may roll back a limited number of migrations by providing the step option to the rollback command. For example, the following command will roll back the last five migrations:

php artisan migrate:rollback --step=5

rollbackコマンドでbatchオプションを指定し、特定の 「バッチ」のマイグレーションをロールバックできます。このとき、batchオプションはアプリケーションのmigrationsデータベーステーブル内のバッチの値に対応します。例えば、次のコマンドはバッチ3のすべてのマイグレーションをロールバックします。You may roll back a specific "batch" of migrations by providing the batch option to the rollback command, where the batch option corresponds to a batch value within your application's migrations database table. For example, the following command will roll back all migrations in batch three:

php artisan migrate:rollback --batch=3

実際にマイグレーションを実行せず、そのマイグレーションが実行するSQL文を確認したい場合は、--pretendフラグをmigrate:rollbackコマンドへ指定します。If you would like to see the SQL statements that will be executed by the migrations without actually running them, you may provide the --pretend flag to the migrate:rollback command:

php artisan migrate:rollback --pretend

migrate:resetコマンドは、アプリケーションのすべてのマイグレーションをロールバックします。The migrate:reset command will roll back all of your application's migrations:

php artisan migrate:reset

ロールバック後マイグレーション実行Roll Back and Migrate Using a Single Command

migrate:refreshコマンドは、すべてのマイグレーションをロールバックしてから、migrateコマンドを実行します。このコマンドは、データベース全体を効果的に再作成します。The migrate:refresh command will roll back all of your migrations and then execute the migrate command. This command effectively re-creates your entire database:

php artisan migrate:refresh

# データベースを真新しくし、データベースの初期設定を実行する
php artisan migrate:refresh --seed

refreshコマンドにstepオプションを指定し、特定の数のマイグレーションをロールバックしてから再マイグレーションできます。たとえば、次のコマンドは、最後の5マイグレーションをロールバックして再マイグレーションします。You may roll back and re-migrate a limited number of migrations by providing the step option to the refresh command. For example, the following command will roll back and re-migrate the last five migrations:

php artisan migrate:refresh --step=5

全テーブル削除後マイグレーションDrop All Tables and Migrate

migrate:freshコマンドは、データベースからすべてのテーブルを削除したあと、migrateコマンドを実行します。The migrate:fresh command will drop all tables from the database and then execute the migrate command:

php artisan migrate:fresh

php artisan migrate:fresh --seed

デフォルトでmigrate:freshコマンドは、デフォルトのデータベース接続からテーブルを削除するだけです。しかし、--databaseオプションを使用すれば、マイグレートするデータベース接続を指定できます。データベース接続名は、アプリケーションのdatabase設定ファイルで定義している接続と対応させる必要があります。By default, the migrate:fresh command only drops tables from the default database connection. However, you may use the --database option to specify the database connection that should be migrated. The database connection name should correspond to a connection defined in your application's database configuration file[/docs/{{version}}/configuration]:

php artisan migrate:fresh --database=admin

warning Warning! migrate:freshコマンドは、プレフィックスに関係なく、すべてのデータベーステーブルを削除します。このコマンドは、他のアプリケーションと共有されているデータベースで開発している場合は注意して使用する必要があります。[!WARNING]
The migrate:fresh command will drop all database tables regardless of their prefix. This command should be used with caution when developing on a database that is shared with other applications.

テーブルTables

テーブルの生成Creating Tables

新しいデータベーステーブルを作成するには、Schemaファサードでcreateメソッドを使用します。createメソッドは2つの引数を取ります。1つ目はテーブルの名前で、2つ目は新しいテーブルを定義するために使用できるBlueprintオブジェクトを受け取るクロージャです。To create a new database table, use the create method on the Schema facade. The create method accepts two arguments: the first is the name of the table, while the second is a closure which receives a Blueprint object that may be used to define the new table:

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

Schema::create('users', function (Blueprint $table) {
    $table->id();
    $table->string('name');
    $table->string('email');
    $table->timestamps();
});

テーブルを作成するときは、スキーマビルダのカラムメソッドのいずれかを使用して、テーブルのカラムを定義します。When creating the table, you may use any of the schema builder's column methods[#creating-columns] to define the table's columns.

テーブル/カラムの存在の確認Determining Table / Column Existence

hasTableメソッド、hasColumnメソッド、hasIndexメソッドを使って、テーブル、カラム、インデックスの存在を判定できます。You may determine the existence of a table, column, or index using the hasTable, hasColumn, and hasIndex methods:

if (Schema::hasTable('users')) {
    // "users"テーブルは存在していた
}

if (Schema::hasColumn('users', 'email')) {
    // "email"カラムを持つ"users"テーブルが存在していた
}

if (Schema::hasIndex('users', ['email'], 'unique')) {
    // The "users" table exists and has a unique index on the "email" column...
}

データベース接続とテーブルオプションDatabase Connection and Table Options

アプリケーションのデフォルトではないデータベース接続でスキーマ操作を実行する場合は、connectionメソッドを使用します。If you want to perform a schema operation on a database connection that is not your application's default connection, use the connection method:

Schema::connection('sqlite')->create('users', function (Blueprint $table) {
    $table->id();
});

さらに、他のプロパティやメソッドを使用して、テーブル作成の他の部分を定義できます。engineプロパティはMariaDBとMySQLを使用するとき、テーブルのストレージエンジンを指定するために使用します。In addition, a few other properties and methods may be used to define other aspects of the table's creation. The engine property may be used to specify the table's storage engine when using MariaDB or MySQL:

Schema::create('users', function (Blueprint $table) {
    $table->engine('InnoDB');

    // ...
});

charsetプロパティとcollat​​ionプロパティはMariaDBとMySQLを使用するとき、作成するテーブルの文字セットと照合順序を指定するために使用します。The charset and collation properties may be used to specify the character set and collation for the created table when using MariaDB or MySQL:

Schema::create('users', function (Blueprint $table) {
    $table->charset('utf8mb4');
    $table->collation('utf8mb4_unicode_ci');

    // ...
});

temporaryメソッドを使用して、テーブルを「一時的」にする必要があることを示すことができます。一時テーブルは、現在の接続のデータベースセッションにのみ表示され、接続が閉じられると自動的に削除されます。The temporary method may be used to indicate that the table should be "temporary". Temporary tables are only visible to the current connection's database session and are dropped automatically when the connection is closed:

Schema::create('calculations', function (Blueprint $table) {
    $table->temporary();

    // ...
});

データベーステーブルに「コメント」を追加したい場合は、テーブルインスタンスに対して、commentメソッドを呼び出してください。テーブルコメントは現在、MariaDB、MySQL、PostgreSQLでのみサポートしています。If you would like to add a "comment" to a database table, you may invoke the comment method on the table instance. Table comments are currently only supported by MariaDB, MySQL, and PostgreSQL:

Schema::create('calculations', function (Blueprint $table) {
    $table->comment('Business calculations');

    // ...
});

テーブルの更新Updating Tables

Schemaファサードのtableメソッドを使用して、既存のテーブルを更新できます。createメソッドと同様に、tableメソッドは2つの引数を取ります。テーブルの名前とテーブルにカラムやインデックスを追加するために使用できるBlueprintインスタンスを受け取るクロージャです。The table method on the Schema facade may be used to update existing tables. Like the create method, the table method accepts two arguments: the name of the table and a closure that receives a Blueprint instance you may use to add columns or indexes to the table:

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

Schema::table('users', function (Blueprint $table) {
    $table->integer('votes');
});

テーブルのリネーム/削除Renaming / Dropping Tables

既存のデータベーステーブルの名前を変更するには、renameメソッドを使用します。To rename an existing database table, use the rename method:

use Illuminate\Support\Facades\Schema;

Schema::rename($from, $to);

既存のテーブルを削除するには、dropまたはdropIfExistsメソッドを使用できます。To drop an existing table, you may use the drop or dropIfExists methods:

Schema::drop('users');

Schema::dropIfExists('users');

外部キーを使用したテーブルのリネームRenaming Tables With Foreign Keys

テーブルをリネームする前に、Laravelのテーブル名ベースの命名規約で外部キーを割り当てさせるのではなく、マイグレーションファイルでテーブルの外部キー制約の名前を明示的に指定していることを確認する必要があります。そうでない場合、外部キー制約名は古いテーブル名で参照されることになるでしょう。Before renaming a table, you should verify that any foreign key constraints on the table have an explicit name in your migration files instead of letting Laravel assign a convention based name. Otherwise, the foreign key constraint name will refer to the old table name.

カラムColumns

カラムの生成Creating Columns

Schemaファサードのtableメソッドを使用して、既存のテーブルを更新できます。createメソッドと同様に、tableメソッドは2つの引数を取ります。テーブルの名前とテーブルに列を追加するために使用できるIlluminate\Database\Schema\Blueprintインスタンスを受け取るクロージャです。The table method on the Schema facade may be used to update existing tables. Like the create method, the table method accepts two arguments: the name of the table and a closure that receives an Illuminate\Database\Schema\Blueprint instance you may use to add columns to the table:

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

Schema::table('users', function (Blueprint $table) {
    $table->integer('votes');
});

利用可能なカラムタイプAvailable Column Types

スキーマビルダのBlueprintは、データベーステーブルに追加できるさまざまなタイプのカラムに対応する、多くのメソッドを提供しています。使用可能な各メソッドを以下に一覧します。The schema builder blueprint offers a variety of methods that correspond to the different types of columns you can add to your database tables. Each of the available methods are listed in the table below:

bigIncrements() bigIncrements()

bigIncrementsメソッドは、自動増分するUNSIGNED BIGINT(主キー)カラムを作成します。The bigIncrements method creates an auto-incrementing UNSIGNED BIGINT (primary key) equivalent column:

$table->bigIncrements('id');

bigInteger() bigInteger()

bigIntegerメソッドはBIGINTカラムを作成します。The bigInteger method creates a BIGINT equivalent column:

$table->bigInteger('votes');

binary() binary()

binaryメソッドはBLOBカラムを作成します。The binary method creates a BLOB equivalent column:

$table->binary('photo');

MySQL、MariaDB、SQLServerを使用する場合は、lengthfixed引数を渡して、VARBINARYまたはBINARY相当のカラムを作成できます。When utilizing MySQL, MariaDB, or SQL Server, you may pass length and fixed arguments to create VARBINARY or BINARY equivalent column:

$table->binary('data', length: 16); // VARBINARY(16)

$table->binary('data', length: 16, fixed: true); // BINARY(16)

boolean() boolean()

booleanメソッドはBOOLEANカラムを作成します。The boolean method creates a BOOLEAN equivalent column:

$table->boolean('confirmed');

char() char()

charメソッドは、指定した長さのCHARカラムを作成します。The char method creates a CHAR equivalent column with of a given length:

$table->char('name', length: 100);

dateTimeTz() dateTimeTz()

dateTimeTzメソッドはDATETIME(タイムゾーン付き)カラムを作成します。The dateTimeTz method creates a DATETIME (with timezone) equivalent column with an optional fractional seconds precision:

$table->dateTimeTz('created_at', precision: 0);

dateTime() dateTime()

dateTimeメソッドは、DATETIMEカラムを作成します。The dateTime method creates a DATETIME equivalent column with an optional fractional seconds precision:

$table->dateTime('created_at', precision: 0);

date() date()

dateメソッドはDATEカラムを作成します。The date method creates a DATE equivalent column:

$table->date('created_at');

decimal() decimal()

decimalメソッドは、指定した精度(合計桁数)とスケール(小数桁数)でDECIMALカラムを作成します。The decimal method creates a DECIMAL equivalent column with the given precision (total digits) and scale (decimal digits):

$table->decimal('amount', total: 8, places: 2);

double() double()

doubleメソッドは、DOUBLEカラムを作成します。The double method creates a DOUBLE equivalent column:

$table->double('amount');

enum() enum()

enumメソッドは、指定した有効な値でENUMカラムを作成します。The enum method creates a ENUM equivalent column with the given valid values:

$table->enum('difficulty', ['easy', 'hard']);

float() float()

floatメソッドは、指定した精度のFLOATカラムを作成します。The float method creates a FLOAT equivalent column with the given precision:

$table->float('amount', precision: 53);

foreignId() foreignId()

foreignIdメソッドはUNSIGNED BIGINTカラムを作成します。The foreignId method creates an UNSIGNED BIGINT equivalent column:

$table->foreignId('user_id');

foreignIdFor() foreignIdFor()

foreignIdFor メソッドは、指定したモデルクラスに {column}_id に相当するカラムを追加します。カラムの型はモデルのキーの型に依存し、UNSIGNED BIGINTCHAR(36)CHAR(26)のいずれかです。The foreignIdFor method adds a {column}_id equivalent column for a given model class. The column type will be UNSIGNED BIGINT, CHAR(36), or CHAR(26) depending on the model key type:

$table->foreignIdFor(User::class);

foreignUlid() foreignUlid()

foreignUlidメソッドはULIDカラムを作成します。The foreignUlid method creates a ULID equivalent column:

$table->foreignUlid('user_id');

foreignUuid() foreignUuid()

foreignUuidメソッドはUUIDカラムを作成します。The foreignUuid method creates a UUID equivalent column:

$table->foreignUuid('user_id');

geography() geography()

geographyメソッドは、指定した空間タイプとSRID(空間参照システム識別子)を持つ、GEOGRAPHYカラムを作成します。The geography method creates a GEOGRAPHY equivalent column with the given spatial type and SRID (Spatial Reference System Identifier):

$table->geography('coordinates', subtype: 'point', srid: 4326);

lightbulb Note: 空間タイプのサポートは、ご使用のデータベース・ドライバに依存します。データベースのドキュメントを参照してください。アプリケーションが、PostgreSQLデータベースを使用している場合は、geographyメソッドを使用する前に、PostGIS拡張モジュールをインストールする必要があります。[!NOTE]
Support for spatial types depends on your database driver. Please refer to your database's documentation. If your application is utilizing a PostgreSQL database, you must install the PostGIS[https://postgis.net] extension before the geography method may be used.

geometry() geometry()

geometryメソッドは、指定した空間タイプとSRID(空間参照システム識別子)を持つ、GEOMETRYカラムを作成します。The geometry method creates a GEOMETRY equivalent column with the given spatial type and SRID (Spatial Reference System Identifier):

$table->geometry('positions', subtype: 'point', srid: 0);

lightbulb Note: 空間タイプのサポートは、ご使用のデータベース・ドライバに依存します。データベースのドキュメントを参照してください。アプリケーションがPostgreSQLデータベースを使用している場合は、geometryメソッドを使用する前に、PostGIS拡張モジュールをインストールする必要があります。[!NOTE]
Support for spatial types depends on your database driver. Please refer to your database's documentation. If your application is utilizing a PostgreSQL database, you must install the PostGIS[https://postgis.net] extension before the geometry method may be used.

id() id()

idメソッドはbigIncrementsメソッドのエイリアスです。デフォルトでは、メソッドはidカラムを作成します。ただし、カラムに別の名前を割り当てたい場合は、カラム名を渡すことができます。The id method is an alias of the bigIncrements method. By default, the method will create an id column; however, you may pass a column name if you would like to assign a different name to the column:

$table->id();

increments() increments()

incrementsメソッドは、主キーとして自動増分のUNSIGNED INTEGERカラムを作成します。The increments method creates an auto-incrementing UNSIGNED INTEGER equivalent column as a primary key:

$table->increments('id');

integer() integer()

integerメソッドはINTEGERカラムを作成します。The integer method creates an INTEGER equivalent column:

$table->integer('votes');

ipAddress() ipAddress()

ipAddressメソッドはVARCHARカラムを作成します。The ipAddress method creates a VARCHAR equivalent column:

$table->ipAddress('visitor');

PostgreSQLを使用する場合、INETカラムが作成されます。When using PostgreSQL, an INET column will be created.

json() json()

jsonメソッドはJSONカラムを作成します。The json method creates a JSON equivalent column:

$table->json('options');

jsonb() jsonb()

jsonbメソッドはJSONBカラムを作成します。The jsonb method creates a JSONB equivalent column:

$table->jsonb('options');

longText() longText()

longTextメソッドはLONGTEXTカラムを作成します。The longText method creates a LONGTEXT equivalent column:

$table->longText('description');

MySQLやMariaDBを使用する場合は、LONGBLOBカラムを作成するために、カラムへbinary文字セットを適用してください。When utilizing MySQL or MariaDB, you may apply a binary character set to the column in order to create a LONGBLOB equivalent column:

$table->longText('data')->charset('binary'); // LONGBLOB

macAddress() macAddress()

macAddressメソッドは、MACアドレスを保持することを目的としたカラムを作成します。PostgreSQLなどの一部のデータベースシステムには、このタイプのデータ専用のカラムタイプがあります。他のデータベースシステムでは、文字カラムに相当するカラムを使用します。The macAddress method creates a column that is intended to hold a MAC address. Some database systems, such as PostgreSQL, have a dedicated column type for this type of data. Other database systems will use a string equivalent column:

$table->macAddress('device');

mediumIncrements() mediumIncrements()

mediumIncrementsメソッドは、主キーが自動増分のUNSIGNED MEDIUMINTカラムを作成します。The mediumIncrements method creates an auto-incrementing UNSIGNED MEDIUMINT equivalent column as a primary key:

$table->mediumIncrements('id');

mediumInteger() mediumInteger()

mediumIntegerメソッドはMEDIUMINTカラムを作成します。The mediumInteger method creates a MEDIUMINT equivalent column:

$table->mediumInteger('votes');

mediumText() mediumText()

mediumTextメソッドはMEDIUMTEXTカラムを作成します。The mediumText method creates a MEDIUMTEXT equivalent column:

$table->mediumText('description');

MySQLやMariaDBを使用する場合は、MEDIUMBLOBカラムを作成するために、カラムにbinary文字セットを適用してください。When utilizing MySQL or MariaDB, you may apply a binary character set to the column in order to create a MEDIUMBLOB equivalent column:

$table->mediumText('data')->charset('binary'); // MEDIUMBLOB

morphs() morphs()

morphsメソッドは、{column}_id{column}_typeVARCHAR型のカラムを追加する便利なメソッドです。{column}_idのカラム型は、モデルキーの型に応じてUNSIGNED BIGINTCHAR(36)CHAR(26)のいずれかになります。The morphs method is a convenience method that adds a {column}_id equivalent column and a {column}_type VARCHAR equivalent column. The column type for the {column}_id will be UNSIGNED BIGINT, CHAR(36), or CHAR(26) depending on the model key type.

このメソッドは、ポリモーフィックEloquentリレーションに必要なカラムを定義するときに使用することを目的としています。次の例では、taggable_idカラムとtaggable_typeカラムが作成されます。This method is intended to be used when defining the columns necessary for a polymorphic Eloquent relationship[/docs/{{version}}/eloquent-relationships]. In the following example, taggable_id and taggable_type columns would be created:

$table->morphs('taggable');

nullableTimestamps() nullableTimestamps()

nullableTimestampsメソッドはtimestampsメソッドのエイリアスです。The nullableTimestamps method is an alias of the timestamps[#column-method-timestamps] method:

$table->nullableTimestamps(precision: 0);

nullableMorphs() nullableMorphs()

このメソッドは、morphsメソッドに似ています。ただし、作成するカラムは"NULLABLE"になります。The method is similar to the morphs[#column-method-morphs] method; however, the columns that are created will be "nullable":

$table->nullableMorphs('taggable');

nullableUlidMorphs() nullableUlidMorphs()

このメソッドはulidMorphsメソッドと似ていますが、作成するカラムは"NULLABLE"になります。The method is similar to the ulidMorphs[#column-method-ulidMorphs] method; however, the columns that are created will be "nullable":

$table->nullableUlidMorphs('taggable');

nullableUuidMorphs() nullableUuidMorphs()

このメソッドは、uuidMorphsメソッドに似ています。ただし、作成するカラムは"NULLABLE"になります。The method is similar to the uuidMorphs[#column-method-uuidMorphs] method; however, the columns that are created will be "nullable":

$table->nullableUuidMorphs('taggable');

rememberToken() rememberToken()

rememberTokenメソッドは、現在の「ログイン持続("remember me")」認証トークンを格納することを目的としたNULL許容のVARCHAR(100)相当のカラムを作成します。The rememberToken method creates a nullable, VARCHAR(100) equivalent column that is intended to store the current "remember me" authentication token[/docs/{{version}}/authentication#remembering-users]:

$table->rememberToken();

set() set()

setメソッドは、指定した有効な値のリストを使用して、SETカラムを作成します。The set method creates a SET equivalent column with the given list of valid values:

$table->set('flavors', ['strawberry', 'vanilla']);

smallIncrements() smallIncrements()

smallIncrementsメソッドは、主キーとして自動増分のUNSIGNED SMALLINTカラムを作成します。The smallIncrements method creates an auto-incrementing UNSIGNED SMALLINT equivalent column as a primary key:

$table->smallIncrements('id');

smallInteger() smallInteger()

smallIntegerメソッドはSMALLINTカラムを作成します。The smallInteger method creates a SMALLINT equivalent column:

$table->smallInteger('votes');

softDeletesTz() softDeletesTz()

softDeletesTzメソッドは、null値可能でオプションの小数秒の精度を持つ、deleted_atのタイムスタンプ(TIMESTAMP)(タイムゾーン付き)カラムを追加します。このカラムはEloquentの「ソフトデリート」機能に必要な、deleted_atタイムスタンプを格納するためのものです。The softDeletesTz method adds a nullable deleted_at TIMESTAMP (with timezone) equivalent column with an optional fractional seconds precision. This column is intended to store the deleted_at timestamp needed for Eloquent's "soft delete" functionality:

$table->softDeletesTz('deleted_at', precision: 0);

softDeletes() softDeletes()

softDeletesメソッドは、null値可能でオプションの小数秒の精度を持つ、deleted_atタイムスタンプ(TIMESTAMP)カラムを追加します。このカラムはEloquentの「ソフトデリート」機能に必要な、deleted_atタイムスタンプを格納するためのものです。The softDeletes method adds a nullable deleted_at TIMESTAMP equivalent column with an optional fractional seconds precision. This column is intended to store the deleted_at timestamp needed for Eloquent's "soft delete" functionality:

$table->softDeletes('deleted_at', precision: 0);

string() string()

stringメソッドは、指定された長さのVARCHARカラムを作成します。The string method creates a VARCHAR equivalent column of the given length:

$table->string('name', length: 100);

text() text()

textメソッドはTEXTカラムを作成します。The text method creates a TEXT equivalent column:

$table->text('description');

MySQLまたはMariaDBを使用する場合、BLOBカラムを作成するには、カラムへbinary文字セットを適用してください。When utilizing MySQL or MariaDB, you may apply a binary character set to the column in order to create a BLOB equivalent column:

$table->text('data')->charset('binary'); // BLOB

timeTz() timeTz()

timeTzメソッドは、オプションの小数秒精度を持つTIME(タイムゾーン付き) カラムを作成します。The timeTz method creates a TIME (with timezone) equivalent column with an optional fractional seconds precision:

$table->timeTz('sunrise', precision: 0);

time() time()

timeメソッドは、オプションの小数秒精度を持つTIMEカラムを作成します。The time method creates a TIME equivalent column with an optional fractional seconds precision:

$table->time('sunrise', precision: 0);

timestampTz() timestampTz()

timestampTzメソッドは、オプションで小数秒の精度を持つ、タイムスタンプ(TIMESTAMP)(タイムゾーン付き)カラムを作成します。The timestampTz method creates a TIMESTAMP (with timezone) equivalent column with an optional fractional seconds precision:

$table->timestampTz('added_at', precision: 0);

timestamp() timestamp()

timestampメソッドは、オプションで小数秒の精度を持つ、TIMESTAMPカラムを作成します。The timestamp method creates a TIMESTAMP equivalent column with an optional fractional seconds precision:

$table->timestamp('added_at', precision: 0);

timestampsTz() timestampsTz()

timestampsTzメソッドは、オプションで小数秒の精度を持つ、created_atupdated_atのタイムスタンプ(TIMESTAMP)(タイムゾーンあり)カラムを作成します。The timestampsTz method creates created_at and updated_at TIMESTAMP (with timezone) equivalent columns with an optional fractional seconds precision:

$table->timestampsTz(precision: 0);

timestamps() timestamps()

timestampsメソッドは、オプションで小数秒の精度を持つ、created_atupdated_atのタイムスタンプ(TIMESTAMP)カラムを作成します。The timestamps method creates created_at and updated_at TIMESTAMP equivalent columns with an optional fractional seconds precision:

$table->timestamps(precision: 0);

tinyIncrements() tinyIncrements()

tinyIncrementsメソッドは、主キーとして自動増分のUNSIGNED TINYINTカラムを作成します。The tinyIncrements method creates an auto-incrementing UNSIGNED TINYINT equivalent column as a primary key:

$table->tinyIncrements('id');

tinyInteger() tinyInteger()

tinyIntegerメソッドはTINYINTカラムを作成します。The tinyInteger method creates a TINYINT equivalent column:

$table->tinyInteger('votes');

tinyText() tinyText()

TinyTextメソッドはTINYTEXTカラムを作成します。The tinyText method creates a TINYTEXT equivalent column:

$table->tinyText('notes');

MySQLまたはMariaDBを使用する場合、TINYBLOBカラムを作成するには、カラムへbinary文字セットを適用してください。When utilizing MySQL or MariaDB, you may apply a binary character set to the column in order to create a TINYBLOB equivalent column:

$table->tinyText('data')->charset('binary'); // TINYBLOB

unsignedBigInteger() unsignedBigInteger()

unsignedBigIntegerメソッドはUNSIGNED BIGINTカラムを作成します。The unsignedBigInteger method creates an UNSIGNED BIGINT equivalent column:

$table->unsignedBigInteger('votes');

unsignedInteger() unsignedInteger()

unsignedIntegerメソッドはUNSIGNED INTEGERカラムを作成します。The unsignedInteger method creates an UNSIGNED INTEGER equivalent column:

$table->unsignedInteger('votes');

unsignedMediumInteger() unsignedMediumInteger()

unsignedMediumIntegerメソッドは、UNSIGNED MEDIUMINTカラムを作成します。The unsignedMediumInteger method creates an UNSIGNED MEDIUMINT equivalent column:

$table->unsignedMediumInteger('votes');

unsignedSmallInteger() unsignedSmallInteger()

unsignedSmallIntegerメソッドはUNSIGNED SMALLINTカラムを作成します。The unsignedSmallInteger method creates an UNSIGNED SMALLINT equivalent column:

$table->unsignedSmallInteger('votes');

unsignedTinyInteger() unsignedTinyInteger()

unsignedTinyIntegerメソッドは UNSIGNED TINYINTカラムを作成します。The unsignedTinyInteger method creates an UNSIGNED TINYINT equivalent column:

$table->unsignedTinyInteger('votes');

ulidMorphs() ulidMorphs()

ulidMorphsメソッドは、{column}_id CHAR(26)カラムと、{column}_type VARCHARカラムを追加する便利なメソッドです。The ulidMorphs method is a convenience method that adds a {column}_id CHAR(26) equivalent column and a {column}_type VARCHAR equivalent column.

このメソッドは、ULID識別子を使用するポリモーフィックEloquentリレーションに必要なカラムを定義するために使用することを想定しています。以下の例では、taggable_idtaggable_typeというカラムが作成されます。This method is intended to be used when defining the columns necessary for a polymorphic Eloquent relationship[/docs/{{version}}/eloquent-relationships] that use ULID identifiers. In the following example, taggable_id and taggable_type columns would be created:

$table->ulidMorphs('taggable');

uuidMorphs() uuidMorphs()

uuidMorphsメソッドは、{column}_id CHAR(36)カラムと、{column}_type VARCHARカラムを追加する便利なメソッドです。The uuidMorphs method is a convenience method that adds a {column}_id CHAR(36) equivalent column and a {column}_type VARCHAR equivalent column.

このメソッドは、UUID識別子を使用するポリモーフィックなEloquentリレーションに必要なカラムを定義するときに使用します。以下の例では、taggable_idカラムとtaggable_typeカラムが作成されます。This method is intended to be used when defining the columns necessary for a polymorphic Eloquent relationship[/docs/{{version}}/eloquent-relationships] that use UUID identifiers. In the following example, taggable_id and taggable_type columns would be created:

$table->uuidMorphs('taggable');

ulid() ulid()

ulidメソッドはULIDカラムを作成します。The ulid method creates a ULID equivalent column:

$table->ulid('id');

uuid() uuid()

uuidメソッドはUUIDカラムを作成します。The uuid method creates a UUID equivalent column:

$table->uuid('id');

year() year()

yearメソッドはYEARカラムを作成します。The year method creates a YEAR equivalent column:

$table->year('birth_year');

カラム修飾子Column Modifiers

上記リストのカラムタイプに加え、データベーステーブルにカラムを追加するときに使用できるカラム「修飾子」もあります。たとえば、カラムを"NULLABLE"へするために、nullableメソッドが使用できます。In addition to the column types listed above, there are several column "modifiers" you may use when adding a column to a database table. For example, to make the column "nullable", you may use the nullable method:

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

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->nullable();
});

次の表は、使用可能なすべてのカラム修飾子を紹介しています。このリストにはインデックス修飾子は含まれていません。The following table contains all of the available column modifiers. This list does not include index modifiers[#creating-indexes]:

修飾子Modifier 説明Description
->after('column')->after('column') カラムを別のカラムの「後に」配置(MariaDB/MySQL)Place the column "after" another column (MariaDB / MySQL).
->autoIncrement()->autoIncrement() INTEGERカラムを自動増分(主キー)として設定Set INTEGER columns as auto-incrementing (primary key).
->charset('utf8mb4')->charset('utf8mb4') カラムの文字セットを指定(MariaDB/MySQL)Specify a character set for the column (MariaDB / MySQL).
->collation('utf8mb4_unicode_ci')->collation('utf8mb4_unicode_ci') カラムのコロケーションを指定Specify a collation for the column.
->comment('my comment')->comment('my comment') カラムへコメントを追加(MariaDB/MySQL/PostgreSQL)Add a comment to a column (MariaDB / MySQL / PostgreSQL).
->default($value)->default($value) カラムの「デフォルト」値を指定Specify a "default" value for the column.
->first()->first() テーブルの「最初の」カラムを配置(MariaDB/MySQL)Place the column "first" in the table (MariaDB / MySQL).
->from($integer)->from($integer) 自動増分フィールドの開始値を設定(MariaDB/MySQL/PostgreSQL)Set the starting value of an auto-incrementing field (MariaDB / MySQL / PostgreSQL).
->invisible()->invisible() SELECT *クエリに対しカラムを「不可視」にする(MariaDB/MySQL)Make the column "invisible" to SELECT * queries (MariaDB / MySQL).
->nullable($value = true)->nullable($value = true) NULL値をカラムに保存可能に設定Allow NULL values to be inserted into the column.
->storedAs($expression)->storedAs($expression) storedカラムを生成(MariaDB/MySQL/PostgreSQL/SQLite)Create a stored generated column (MariaDB / MySQL / PostgreSQL / SQLite).
->unsigned()->unsigned() INTEGERカラムをUNSIGNEDとして設定(MariaDB/MySQL)Set INTEGER columns as UNSIGNED (MariaDB / MySQL).
->useCurrent()->useCurrent() CURRENT_TIMESTAMPをデフォルト値として使用するようにTIMESTAMPカラムを設定Set TIMESTAMP columns to use CURRENT_TIMESTAMP as default value.
->useCurrentOnUpdate()->useCurrentOnUpdate() レコードが更新されたときにCURRENT_TIMESTAMPを使用するようにTIMESTAMPカラムを設定(MariaDB/MySQL)Set TIMESTAMP columns to use CURRENT_TIMESTAMP when a record is updated (MariaDB / MySQL).
->virtualAs($expression)->virtualAs($expression) 仮想カラムを生成(MariaDB/MySQL/SQLite)Create a virtual generated column (MariaDB / MySQL / SQLite).
->generatedAs($expression)->generatedAs($expression) 指定のシーケンスオプションで、識別カラムを生成(PostgreSQL)Create an identity column with specified sequence options (PostgreSQL).
->always()->always() IDカラムの入力に対するシーケンス値の優先順位を定義(PostgreSQL)Defines the precedence of sequence values over input for an identity column (PostgreSQL).

デフォルト式Default Expressions

default修飾子は、値またはIlluminate\Database\Query\Expressionインスタンスを受け入れます。Expressionインスタンスを使用すると、Laravelが値を引用符で囲むのを防ぎ、データベース固有の関数を使用できるようになります。これがとくに役立つ状況の1つは、JSONカラムにデフォルト値を割り当てる必要がある場合です。The default modifier accepts a value or an Illuminate\Database\Query\Expression instance. Using an Expression instance will prevent Laravel from wrapping the value in quotes and allow you to use database specific functions. One situation where this is particularly useful is when you need to assign default values to JSON columns:

<?php

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

return new class extends Migration
{
    /**
     * マイグレーションの実行
     */
    public function up(): void
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->id();
            $table->json('movies')->default(new Expression('(JSON_ARRAY())'));
            $table->timestamps();
        });
    }
};

warning Warning! デフォルト式のサポートは、データベースドライバ、データベースのバージョン、フィールドタイプに依存します。お使いのデータベースのドキュメントを参照してください。[!WARNING]
Support for default expressions depends on your database driver, database version, and the field type. Please refer to your database's documentation.

カラム順序Column Order

MariaDBとMySQLデータベースを使用するときは、スキーマ内の既存の列の後に列を追加するためにafterメソッドを使用できます。When using the MariaDB or MySQL database, the after method may be used to add columns after an existing column in the schema:

$table->after('password', function (Blueprint $table) {
    $table->string('address_line1');
    $table->string('address_line2');
    $table->string('city');
});

カラムの変更Modifying Columns

changeメソッドを使用すると、既存のカラムのタイプと属性を変更できます。たとえば、stringカラムのサイズを大きくしたい場合があります。changeメソッドの動作を確認するために、nameカラムのサイズを25から50に増やしてみましょう。これを実行するには、カラムの新しい状態を定義してから、changeメソッドを呼び出します。The change method allows you to modify the type and attributes of existing columns. For example, you may wish to increase the size of a string column. To see the change method in action, let's increase the size of the name column from 25 to 50. To accomplish this, we simply define the new state of the column and then call the change method:

Schema::table('users', function (Blueprint $table) {
    $table->string('name', 50)->change();
});

カラムを変更する際には、カラム定義に保持したいすべての修飾子を明示的に含める必要があります。例えば、unsigned属性、default属性、comment属性を保持するには、カラムを変更する際にそれぞれの修飾子を明示的に呼び出す必要があります。When modifying a column, you must explicitly include all the modifiers you want to keep on the column definition - any missing attribute will be dropped. For example, to retain the unsigned, default, and comment attributes, you must call each modifier explicitly when changing the column:

Schema::table('users', function (Blueprint $table) {
    $table->integer('votes')->unsigned()->default(1)->comment('my comment')->change();
});

changeメソッドはカラムのインデックスを変更しません。そのため、カラムを変更する際には、インデックス修飾子を使って明示的にインデックスを追加もしくは、削除してください。The change method does not change the indexes of the column. Therefore, you may use index modifiers to explicitly add or drop an index when modifying the column:

// インデックス追加
$table->bigIncrements('id')->primary()->change();

// インデックス削除
$table->char('postal_code', 10)->unique(false)->change();

カラムのリネームRenaming Columns

カラムの名前を変更するには、スキーマビルダが提供する、renameColumnメソッドを使用します。To rename a column, you may use the renameColumn method provided by the schema builder:

Schema::table('users', function (Blueprint $table) {
    $table->renameColumn('from', 'to');
});

カラムの削除Dropping Columns

カラムを削除するには、スキーマビルダのdropColumnメソッドを使用します。To drop a column, you may use the dropColumn method on the schema builder:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn('votes');
});

カラム名の配列をdropColumnメソッドに渡すことにより、テーブルから複数のカラムを削除できます。You may drop multiple columns from a table by passing an array of column names to the dropColumn method:

Schema::table('users', function (Blueprint $table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

使用可能なコマンドエイリアスAvailable Command Aliases

Laravelは、一般的なタイプのカラムの削除の便利な方法を提供しています。各メソッドは以下の表で説明します。Laravel provides several convenient methods related to dropping common types of columns. Each of these methods is described in the table below:

コマンドCommand 説明Description
$table->dropMorphs('morphable');$table->dropMorphs('morphable'); morphable_idカラムとmorphable_typeカラムを削除Drop the morphable_id and morphable_type columns.
$table->dropRememberToken();$table->dropRememberToken(); remember_tokenカラムを削除Drop the remember_token column.
$table->dropSoftDeletes();$table->dropSoftDeletes(); deleted_atカラムを削除Drop the deleted_at column.
$table->dropSoftDeletesTz();$table->dropSoftDeletesTz(); dropSoftDeletes()メソッドのエイリアスAlias of dropSoftDeletes() method.
$table->dropTimestamps();$table->dropTimestamps(); created_atカラムとupdated_atカラムを削除Drop the created_at and updated_at columns.
$table->dropTimestampsTz();$table->dropTimestampsTz(); dropTimestamps()メソッドのエイリアスAlias of dropTimestamps() method.

インデックスIndexes

インデックスの生成Creating Indexes

Laravelスキーマビルダは多くのタイプのインデックスをサポートしています。次の例では、新しいemailカラムを作成し、その値が一意であることを指定しています。インデックスを作成するには、uniqueメソッドをカラム定義にチェーンします。The Laravel schema builder supports several types of indexes. The following example creates a new email column and specifies that its values should be unique. To create the index, we can chain the unique method onto the column definition:

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

Schema::table('users', function (Blueprint $table) {
    $table->string('email')->unique();
});

または、カラムを定義した後にインデックスを作成することもできます。これを行うには、スキーマビルダBlueprintでuniqueメソッドを呼び出す必要があります。このメソッドは、一意のインデックスを受け取る必要があるカラムの名前を引数に取ります。Alternatively, you may create the index after defining the column. To do so, you should call the unique method on the schema builder blueprint. This method accepts the name of the column that should receive a unique index:

$table->unique('email');

カラムの配列をindexメソッドに渡して、複合インデックスを作成することもできます。You may even pass an array of columns to an index method to create a compound (or composite) index:

$table->index(['account_id', 'created_at']);

インデックスを作成するとき、Laravelはテーブル、カラム名、およびインデックスタイプに基づいてインデックス名を自動的に生成しますが、メソッドに2番目の引数を渡して、インデックス名を自分で指定することもできます。When creating an index, Laravel will automatically generate an index name based on the table, column names, and the index type, but you may pass a second argument to the method to specify the index name yourself:

$table->unique('email', 'unique_email');

利用可能なインデックスタイプAvailable Index Types

LaravelのスキーマビルダBlueprintクラスは、Laravelでサポートしている各タイプのインデックスを作成するメソッドを提供しています。各indexメソッドは、オプションの2番目の引数を取り、インデックスの名前を指定します。省略した場合、名前は、インデックスに使用されるテーブルとカラムの名前、およびインデックスタイプから派生します。使用可能な各インデックスメソッドは、以下の表で説明します。Laravel's schema builder blueprint class provides methods for creating each type of index supported by Laravel. Each index method accepts an optional second argument to specify the name of the index. If omitted, the name will be derived from the names of the table and column(s) used for the index, as well as the index type. Each of the available index methods is described in the table below:

コマンドCommand 説明Description
$table->primary('id');$table->primary('id'); 主キーを追加Adds a primary key.
$table->primary(['id', 'parent_id']);$table->primary(['id', 'parent_id']); 複合キーを追加Adds composite keys.
$table->unique('email');$table->unique('email'); 一意のインデックスを追加Adds a unique index.
$table->index('state');$table->index('state'); インデックスを追加Adds an index.
$table->fullText('body');$table->fullText('body'); 全文検索インデックスを追加(MariaDB/MySQL/PostgreSQL)Adds a full text index (MariaDB / MySQL / PostgreSQL).
$table->fullText('body')->language('english');$table->fullText('body')->language('english'); 特定言語のフルテキストインデックス追加Adds a full text index of the specified language (PostgreSQL).
$table->spatialIndex('location');$table->spatialIndex('location'); 空間インデックスを追加(SQLiteを除く)Adds a spatial index (except SQLite).

インデックスのリネームRenaming Indexes

インデックスの名前を変更するには、スキーマビルダBlueprintが提供するrenameIndexメソッドを使用します。このメソッドは、現在のインデックス名を最初の引数として取り、目的の名前を2番目の引数として取ります。To rename an index, you may use the renameIndex method provided by the schema builder blueprint. This method accepts the current index name as its first argument and the desired name as its second argument:

$table->renameIndex('from', 'to')

インデックスの削除Dropping Indexes

インデックスを削除するには、インデックスの名前を指定する必要があります。デフォルトでは、Laravelはテーブル名、インデックス付きカラムの名前、およびインデックスタイプに基づいてインデックス名を自動的に割り当てます。ここではいくつかの例を示します。To drop an index, you must specify the index's name. By default, Laravel automatically assigns an index name based on the table name, the name of the indexed column, and the index type. Here are some examples:

コマンドCommand 説明Description
$table->dropPrimary('users_id_primary');$table->dropPrimary('users_id_primary'); "users"テーブルから主キーを削除Drop a primary key from the "users" table.
$table->dropUnique('users_email_unique');$table->dropUnique('users_email_unique'); "users"テーブルから一意のインデックスを削除Drop a unique index from the "users" table.
$table->dropIndex('geo_state_index');$table->dropIndex('geo_state_index'); "geo"テーブルから基本インデックスを削除Drop a basic index from the "geo" table.
$table->dropFullText('posts_body_fulltext');$table->dropFullText('posts_body_fulltext'); "posts"テーブルからフルテキストインデックスを削除Drop a full text index from the "posts" table.
$table->dropSpatialIndex('geo_location_spatialindex');$table->dropSpatialIndex('geo_location_spatialindex'); "geo"テーブルから空間インデックスを削除(SQLiteを除く)Drop a spatial index from the "geo" table (except SQLite).

インデックスを削除するメソッドにカラムの配列を渡すと、テーブル名、カラム、およびインデックスタイプに基づいてインデックス名が生成されます。If you pass an array of columns into a method that drops indexes, the conventional index name will be generated based on the table name, columns, and index type:

Schema::table('geo', function (Blueprint $table) {
    $table->dropIndex(['state']); // 'geo_state_index'インデックスを削除
});

外部キー制約Foreign Key Constraints

Laravelは、データベースレベルで参照整合性を強制するために使用される外部キー制約の作成もサポートしています。たとえば、usersテーブルのidカラムを参照するpostsテーブルのuser_idカラムを定義しましょう。Laravel also provides support for creating foreign key constraints, which are used to force referential integrity at the database level. For example, let's define a user_id column on the posts table that references the id column on a users table:

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

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});

この構文はかなり冗長であるため、Laravelは、より良い開発者エクスペリエンスを提供するため、規約を使用した簡潔なメソッドをさらに提供します。foreignIdメソッドを使用すると、上記の例は次のように書き直すことができます。Since this syntax is rather verbose, Laravel provides additional, terser methods that use conventions to provide a better developer experience. When using the foreignId method to create your column, the example above can be rewritten like so:

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained();
});

foreignIdメソッドは、UNSIGNED BIGINTカラムを作成し、constrainedメソッドは規約を利用し、参照するテーブルとカラムを決定します。テーブル名がLaravelの規約と合わない場合は、手作業でconstrainedメソッドへ指定してください。さらに、生成するインデックスへ割り当てる名前も指定できます。The foreignId method creates an UNSIGNED BIGINT equivalent column, while the constrained method will use conventions to determine the table and column being referenced. If your table name does not match Laravel's conventions, you may manually provide it to the constrained method. In addition, the name that should be assigned to the generated index may be specified as well:

Schema::table('posts', function (Blueprint $table) {
    $table->foreignId('user_id')->constrained(
        table: 'users', indexName: 'posts_user_id'
    );
});

必要なアクションに"on delete"や"on update"の制約プロパティを指定することもできます。You may also specify the desired action for the "on delete" and "on update" properties of the constraint:

$table->foreignId('user_id')
      ->constrained()
      ->onUpdate('cascade')
      ->onDelete('cascade');

これらのアクションには、表現力の高い別構文も用意しています。An alternative, expressive syntax is also provided for these actions:

メソッドMethod 解説Description
$table->cascadeOnUpdate();$table->cascadeOnUpdate(); 更新をカスケードUpdates should cascade.
$table->restrictOnUpdate();$table->restrictOnUpdate(); 更新を制限Updates should be restricted.
$table->nullOnUpdate();$table->nullOnUpdate(); 更新時に外部キーへNULLをセットUpdates should set the foreign key value to null.
$table->noActionOnUpdate();$table->noActionOnUpdate(); 更新では何もしないNo action on updates.
$table->cascadeOnDelete();$table->cascadeOnDelete(); 削除をカスケードDeletes should cascade.
$table->restrictOnDelete();$table->restrictOnDelete(); 削除を制限Deletes should be restricted.
$table->nullOnDelete();$table->nullOnDelete(); 削除時に外部キーへNULLをセットDeletes should set the foreign key value to null.
$table->noActionOnDelete();$table->noActionOnDelete(); 子レコード存在時に削除防止Prevents deletes if child records exist.

追加のカラム修飾子は、constrainedメソッドの前に呼び出す必要があります。Any additional column modifiers[#column-modifiers] must be called before the constrained method:

$table->foreignId('user_id')
      ->nullable()
      ->constrained();

外部キーの削除Dropping Foreign Keys

外部キーを削除するには、dropForeignメソッドを使用して、削除する外部キー制約の名前を引数として渡してください。外部キー制約は、インデックスと同じ命名規約を使用しています。つまり、外部キー制約名は、制約内のテーブルとカラムの名前に基づいており、その後に「_foreign」サフィックスが続きます。To drop a foreign key, you may use the dropForeign method, passing the name of the foreign key constraint to be deleted as an argument. Foreign key constraints use the same naming convention as indexes. In other words, the foreign key constraint name is based on the name of the table and the columns in the constraint, followed by a "_foreign" suffix:

$table->dropForeign('posts_user_id_foreign');

または、外部キーを保持するカラム名を含む配列をdropForeignメソッドに渡すこともできます。配列は、Laravelの制約命名規約を使用して外部キー制約名に変換されます。Alternatively, you may pass an array containing the column name that holds the foreign key to the dropForeign method. The array will be converted to a foreign key constraint name using Laravel's constraint naming conventions:

$table->dropForeign(['user_id']);

外部キー制約の切り替えToggling Foreign Key Constraints

次の方法を使用して、マイグレーション内の外部キー制約を有効または無効にできます。You may enable or disable foreign key constraints within your migrations by using the following methods:

Schema::enableForeignKeyConstraints();

Schema::disableForeignKeyConstraints();

Schema::withoutForeignKeyConstraints(function () {
    // Constraints disabled within this closure...
});

warning Warning! SQLiteは、デフォルトで外部キー制約を無効にします。SQLiteを使用する場合は、マイグレーションでデータベースを作成する前に、データベース設定の外部キーサポートを有効にするを確実に行ってください。[!WARNING]
SQLite disables foreign key constraints by default. When using SQLite, make sure to enable foreign key support[/docs/{{version}}/database#configuration] in your database configuration before attempting to create them in your migrations.

イベントEvents

利便が良いように、各マイグレート操作はイベントを発行します。以下のイベントはすべて、Illuminate\Database\Events\MigrationEvent基本クラスを継承しています。For convenience, each migration operation will dispatch an event[/docs/{{version}}/events]. All of the following events extend the base Illuminate\Database\Events\MigrationEvent class:

クラスClass 説明Description
Illuminate\Database\Events\MigrationsStartedIlluminate\Database\Events\MigrationsStarted マイグレーションのバッチが実行されようとしているA batch of migrations is about to be executed.
Illuminate\Database\Events\MigrationsEndedIlluminate\Database\Events\MigrationsEnded マイグレーションのバッチが実行終了したA batch of migrations has finished executing.
Illuminate\Database\Events\MigrationStartedIlluminate\Database\Events\MigrationStarted 単一マイグレーションが実行されようとしているA single migration is about to be executed.
Illuminate\Database\Events\MigrationEndedIlluminate\Database\Events\MigrationEnded 単一マイグレーションが実行終了したA single migration has finished executing.
Illuminate\Database\Events\NoPendingMigrationsIlluminate\Database\Events\NoPendingMigrations 未適用のマイグレーションをみつけられなかったA migration command found no pending migrations.
Illuminate\Database\Events\SchemaDumpedIlluminate\Database\Events\SchemaDumped データベーススキマのダンプが終了したA database schema dump has completed.
Illuminate\Database\Events\SchemaLoadedIlluminate\Database\Events\SchemaLoaded 既存のデータベーススキマのダンプをロードしたAn existing database schema dump has loaded.

章選択

設定

明暗テーマ
light_mode
dark_mode
brightness_auto システム設定に合わせる
テーマ選択
photo_size_select_actual デフォルト
photo_size_select_actual モノクローム(白黒)
photo_size_select_actual Solarized風
photo_size_select_actual GitHub風(青ベース)
photo_size_select_actual Viva(黄緑ベース)
photo_size_select_actual Happy(紫ベース)
photo_size_select_actual Mint(緑ベース)
コードハイライトテーマ選択

明暗テーマごとに、コードハイライトのテーマを指定できます。

テーマ配色確認
スクリーン表示幅
640px
80%
90%
100%

768px以上の幅があるときのドキュメント部分表示幅です。

インデント
無し
1rem
2rem
3rem
原文確認
原文を全行表示
原文を一行ずつ表示
使用しない

※ 段落末のEボタンへカーソルオンで原文をPopupします。

Diff表示形式
色分けのみで区別
行頭の±で区別
削除線と追記で区別

※ [tl!…]形式の挿入削除行の表示形式です。

テストコード表示
両コード表示
Pestのみ表示
PHPUnitのみ表示
OS表示
全OS表示
macOSのみ表示
windowsのみ表示
linuxのみ表示
和文変換

対象文字列と置換文字列を半角スペースで区切ってください。(最大5組各10文字まで)

本文フォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

コードフォント

総称名以外はCSSと同様に、"〜"でエスケープしてください。

保存内容リセット

localStrageに保存してある設定項目をすべて削除し、デフォルト状態へ戻します。

ヘッダー項目移動

キーボード操作