Search

検索したいワードを入力してください

2019年04月09日

Laravelのマイグレーションでカラムなどの作成方法を解説

Laravelのマイグレーション機能では、テーブルへのカラム作成や変更なども簡単に行えます。更新や削除など機能に応じた前準備が必要となることもあります。Laravelのマイグレーション機能の使い方を覚え、テーブル操作を行ってみましょう。

マイグレーションとは

マイグレーションとは、プログラムやデータ、OSなどの環境やプラットフォームなどを移行し、移行先に合わせた形式に変換すること意味するIT用語です。

移行作業を行う対象によって、「Windowsマイグレーション」「データベースマイグレーション」など呼ばれるマイグレーションの種類があります。

語源となる英語のマイグレーション(migration)には、「移動」や「移住」といった意味があります。

Laravelのマイグレーションとは

Laravelでは、マイグレーションにより、データベースのテーブル作成や編集などを管理することができます。管理するにあたって、Laravelでは、「マイグレーションファイルの作成」と「マイグレーション実行」が必要になります。

マイグレーションファイルは、作成するテーブルの設計書にあたります。どのようなデータ型のデータを保存するテーブルかといった定義を行うことになります。

マイグレーションで行えることまとめ

Laravelでマイグレーションの機能を使って行えるテーブル操作について、順を追ってご紹介します。Laravelのマイグレーションは、データベーステーブルの管理が主目的であると認識しておきましょう。テーブルに関する操作は、基本的にマイグレーションの機能を使って行えます。

マイグレーションファイルの新規生成

Laravelのマイグレーションでテーブルを作成する際は、artisanコマンドを使って、マイグレーションファイルを新規作成します。

【基本構文】
php artisan make:migration create_xxxx_table

create_xxxx_tableのxxxxに作成するテーブル名を記述します。記述した名称のテーブルを作成するマイグレーションファイルが生成されます。

テーブルの作成

Laravelのマイグレーション機能を使ったテーブル作成は、次の3ステップで行えます。

①マイグレーションファイルの作成
②マイグレーションファイルの編集
③マイグレーションの実行

この手順は、実はテーブル作成だけでなく、テーブル定義の更新など「マイグレーション」全体としての手順となります。

①で作成されたマイグレーションファイルに②で必要事項を記載し、③でデータベースに適用します。

方法

Laravelで新しいテーブルを作成するには、マイグレーションファイルのupメソッドの中に、Schemaファサードのcreateメソッドを記述します。createメソッドの1つ目の引数にはテーブル名を記述する必要があります。

【サンプルコード】
Schema::create('users', function (Blueprint $table) {
});

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

マイグレーションファイルを作成すると、マイグレーションに必要な雛形コードが生成されます。テーブル作成の場合は、自動生成された記述の中にある「up」メソッドに、テーブル作成に必要な情報を記述します。

以下のサンプル記述は、「name」カラムを持つ簡単なテーブルを作成するイメージです。自動生成されたコードは、upメソッドとしての枠組みだけです。処理コードはすべてテーブル作成用に追記しています。

【サンプル記述】
public function up()
 {
   Schema::create('users', function (Blueprint $table) {
     $table->increments('id');
     $table->string('name');
     $table->timestamps();
  });

 }

マイグレーション実行

Laravelで作成したいテーブルの設計を反映させたマイグレーションファイルは、以下のコマンドでデータベースに反映させます。

【実行コード】
php artisan migrate

マイグレーションの初回ではなく、新たなマイグレーションファイルを追加した場合は、以下のように、一旦リフレッシュしてから反映させることになります。
php artisan migrate:refresh

テーブルのリネームと削除

Laravelでテーブル名の変更を行いたい場合も、マイグレーションの機能を使って簡単に行うことができます。また、Laravelでデータベースから不要となったテーブルを削除する場合も、マイグレーションの機能を使って簡単に実行できます。

ここでは、具体的にLaravelで利用するテーブルリネームの方法とテーブル削除の方法を見ていきましょう。

テーブルリネームの方法

Laravelで既存のテーブル名前を別の名称に変えたい場合は、renameメソッドを記述します。新規テーブルを作成する場合と同じように、マイグレーションファイルのupメソッドの中に記述します。

【記述コード】
Schema::rename(変更前テーブル名, 変更後テーブル名);

テーブルリネームの注意事項

Laravelでテーブルのリネームを行う際は、リネームしようとしているテーブルを外部キーで参照しているテーブルが存在しないかチェックしておく必要があります。

外部キーで参照しているテーブルがあるにも関わらずリネームしてしまうと、外部キーは存在しないテーブルを参照してしまうことになります。

テーブル削除の方法

Laravelで既存のテーブルを削除する場合に、マイグレーションで使えるメソッドは2つあります。dropかdropIfExistsを使ってテーブルの削除を行います。テーブルの削除は、テーブル作成やリネームと異なり、マイグレーションファイルのdownメソッドの中に記述します。

【記述コード】
Schema::drop('users');
Schema::dropIfExists('users');

【サンプル記述】
public function down()
{
   Schema::drop('users');
}

テーブル削除の注意点

既存のテーブルを削除する場合も、当該テーブルを外部キーで参照しているテーブルがないか、確認したうえで実行する必要があります。こうしたテーブルを考慮しないでテーブルを削除してしまうと、存在しないテーブルを参照するキーを持つテーブルが残ってしまいます。

データベース接続とテーブル操作

デフォルト接続のデータベースに対し、操作を行う場合は、マイグレーションファイルにいきなり、createやrenameといったメソッドを記述することができます。

しかし、デフォルト接続以外のデータベース接続で、テーブルの作成や削除といったスキーマ操作を行う場合は、connectionメソッドを使ってから、テーブル操作メソッドを記述していく必要があります。

connectionメソッドを使う

connectionメソッドは、引数にデフォルト接続ではない、接続しなおす接続名を記述します。次の動作としてcreateやrenameといったメソッドを記述します。

【コード記述例】
Schema::connection('corporation')->create('users', function (Blueprint $table) {
$table->increments('id');
});

カラム作成

Laravelでテーブルにカラムを作成する場合は、テーブル作成時にcreateメソッドの中で定義を記述する方法と、あとから既存のテーブルにカラムを追加する方法があります。

あとから既存のテーブルにカラムを追加する場合は、Schemaファサードのtableメソッドを使います。tableメソッドの使い方は、createメソッドと同じで、最初の引数にテーブル名を指定します。

Schemaファサードのtableメソッドを使う

例えば、userテーブルに新たに住所(address)というカラムを追加する場合を見てみましょう。

【コード記述】
Schema::table('users', function (Blueprint $table) {
$table->string('address');
});

カラム作成時に指定できる主なカラムタイプ

Laravelでテーブルにカラムを作成・追加する際は、カラムタイプを指定します。カラム追加の基本構文と、指定できる主なカラムタイプをご紹介します。

【カラム追加の構文】
$table->カラムタイプ(カラム名);

コード記述例カラムタイプの意味
bigIncrements(カラム名)符号なしBIGINTを使用した自動増分ID(主キー)のカラム
mediumIncrements(カラム名)符号なしMEDIUMINTを使用した自動増分ID(主キー)のカラム
increments(カラム名)符号なしINTを使用した自動増分ID(主キー)のカラム
bigInteger(カラム名)BIGINTデータのカラム
mediumInteger(カラム名)MEDIUMINTデータのカラム
integer(カラム名)INTEGERデータのカラム
$ipAddress(カラム名)IPアドレスデータのカラム
macAddress(カラム名)MACアドレスデータのカラム
binary(カラム名)BLOBデータのカラム
boolean(カラム名)booleanデータのカラム
char(カラム名, 100)オプションの文字長を指定するCHARデータのカラム
date(カラム名)DATE型データのカラム
dateTime(カラム名)DATETIME型データのカラム
decimal(カラム名, 8, 2)有効桁数及び小数点以下桁数指定のDECIMALデータのカラム
double(カラム名, 8, 2)有効桁数及び小数点以下桁数指定のDOUBLEデータのカラム
float(カラム名, 8, 2)有効桁数及び小数点以下桁数指定のFLOATデータのカラム
string(カラム名, 100)オプションの文字長を指定したVARCHARデータのカラム
multiLineString(カラム名)multilinestring型データのカラム
text(カラム名)TEXTデータのカラム

カラム修飾子

Laravelではカラムを追加するときに、カラムタイプの指定に追加して「カラム修飾子」と呼ばれる設定も可能です。

たとえば、プログラムから「必須項目ではない」という前提で参照するカラムは「NULL値設定可能(nullable)」のカラムにすることで、値を設定しなくても可能なカラムになります。

nullableメソッドを使う

NULL値設定可能なカラムとして追加する際は、マイグレーションファイルには以下の例のようにコードを記述します。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->string('hobby')->nullable();
});

defaultメソッドを使う

カラムに値が必須な場合でも、何も設定されなかった場合にエラーとせず、既定値を設定することも可能です。カラム作成・追加のときに「default」メソッドで既定値を指定します。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->string('hobby')->default('StampCollecting');
});

autoIncrementメソッドを使う

整数カラムを自動増分ID(主キー)へ設定したい場合、カラム修飾子の「autoIncrement」メソッドを修飾子として使うことができます。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->unsignedInteger('memberId')->autoIncrement();
});

カラム変更

Laravelでは、マイグレーションの機能を使って、既存のカラムを変更することもできます。カラムを変更する前に、composer.jsonファイルで、doctrine/dbalを追加しておく必要があります。

Doctrine DBALライブラリーは、現在のカラムの状態を決め、マイグレーションで指定されたカラムに対し、修正を行うSQLクエリを生成する際に必要となります。

composer.jsonファイルでdoctrine/dbalを追加する

カラムを変更する場合は、まず、Laravelルートディレクトリへ移動して以下のコードを実行しておきましょう。

【実行コード】
composer require doctrine/dbal

カラムの属性変更

カラムの属性変更をする場合は、changeメソッドを使います。カラムの桁数変更では、記述例のように記述します。現在何桁かは指定不要です。変更後の桁数(例では75)のみ指定し、changeメソッドを記述します。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->string('name', 75)->change();
});

カラム名変更

カラム名を変更するには、renameColumnメソッドを使います。メソッドの引数として、変更前のカラム名と変更後のカラム名を指定します。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->renameColumn('name', 'username');
});

カラム削除

カラムを削除したいときは、dropColumnメソッドを使います。カラム削除の場合も、削除実行の前にcomposer.jsonファイルへdoctrine/dbal依存パッケージを追加する必要があります。その後、composer updateを実行します。

dropColumnメソッドを使う

カラム削除には、dropColumnメソッドを使います。引数に配列を使えるので、複数のカラムを一度に削除指定できます。

【コード記述例】
Schema::table('users', function (Blueprint $table) {
$table->dropColumn(['address', 'ip');
});


1カラムのみ削除する場合は、「dropColumn('ip')」のように指定します。

インデックス作成

Laravelのマイグレーション機能を使って、カラムにインデックスを作成できます。カラムを定義する際にインデックスを付けることも、一旦カラムを定義した後に、インデックスを追加することも可能です。

【主なインデックス】
・primary(カラム名):主キー
・primary([カラム名1, カラム名2]):複合キー
・unique(カラム名):uniqueキー
・index(カラム名):基本的なインデックス

uniqueメソッドをチェーンで付け加える

カラム定義時に、インデックス設定としてuniqueキーとなるよう設定がすることもできます。この場合はチェーンで付け加えます。

【コード記述例】
$table->string('device')->unique();

ほかのインデックス追加メソッドも同様に、チェーンで付け加えることができます。

Laravelのマイグレーションを使ってテーブル更新してみよう

Laravelでは、マイグレーション機能を使うことで、テーブルの作成自体も、作成後に発生する「調整」ともいえるテーブルやカラムの変更・削除といった操作も、簡単に行えます。

テーブルのスキーマ操作は、DBAとしての技術がなくても可能ですが、既存テーブルの操作は、慎重に行う必要があります。テーブルやカラムの更新・削除にまつわる注意事項をよく確認し、Laravelのマイグレーション機能を使ってみましょう。

【PR】多くの人がプログラミングを諦めてしまう理由をご存知ですか?



近年プログラミングを勉強する人が増えています。

プログラミング学習者の多くは独学から取り組もうとしますが、だいたい80%ほどは3ヶ月も続かずに諦めてしまいます。早い人は1日目で。

多くの人がプログラミングを独学しようとして諦める理由は、次の3つ。
●モチベーションが維持できない
●エラーの原因・解決方法が分からない
●どう学習すればよいか分からない

TechBoostというプログラミングスクールでは、みんなと一緒にプログラミングをするのでモチベーションの維持ができ、分からないことがあればマンツーマンで教えてくれ、徹底的に研究された初心者向けの教材が揃っています。

TechBoostを卒業後、実際にエンジニアとして転職した方もいるほど。

本気でプログラミングを学びたい方は、一度無料のカウンセリングでご相談ください。プログラミングを嫌いになる前に。

tech boostについて

オーダーメイド型の学習コンテンツを提供する「tech boost」 は、エンジニアのキャリア支援に特化したサービスを複数展開している株式会社Branding Engineerが運営しているプログラミングスクールです。最短3ヶ月間で、未経験から『プログラミングの基礎』、『実際に業務で必要となるスキル』、『今のトレンドとなっている知識』まで学べ、ご希望の方にはプロのキャリアアドバイザーによる就業支援を行うことができます。

tech boost卒業生インタビュー

tech boostの卒業生の声を聞きました。あなたがプログラミングを学びたい理由を、一度考えてみてください。
営業→Javaエンジニア→Rubyエンジニアと転向し、第一志望のFinTech企業で働く山下さん
元営業、ビジネスのわかるエンジニアを目指す菅原さん
サンフランシスコに交換留学し、シリコンバレーのVCでインターン中の梅本さん
予備校の営業から半年でエンジニア転職を果たした小田島さん

tech boostの口コミ



Related