PHP-Laravel- プログラミング

【Laravel入門】マイグレーションの方法と注意点

今回は、migration(マイグレーション)について解説していきます。

「migration」はデータベースを作成する部分です。

ここからはMySQLのデータと連携させつつ、解説を進めていきたいと思います。

Laravelについてよくわからないや。。。という方は、以下を併せて読んでいただけるとご理解いただけると思います。

Laravelとは?現在の、PHPフレームワークの筆頭として大活躍 (akihisa-h.com)

マイグレーションとは

まずマイグレーションとは何か?を解説していきます。

英語でいうとmigrate」=「移住する」migration」=「移住」という意味になります。

Laravelの世界では、Laravel内のデータをMySQLなどのデータベースに反映させることをいいます。

それでは実際にマイグレーションを実行していきたいと思います。

MySQL上にデータベースが作られていることを前提に話を進めます。

次に、Laravelフォルダ内の【.env】ファイルにMySQLの接続情報を登録しておきます。

ローカル環境なら、ユーザー名やパスワードを設定していなければ、データベース名を変更するだけでOKです。

データベースは12行目あたりの【DB_DATABASE=】の部分に入力します。(例では、test という名前のデータベースが作られています)

例) DB_DATABASE=test

新たにテーブルを作成します

Laravelをインストールしたフォルダに移動して、コマンドラインに以下のように入力してEnterキーを押します。

php artisan make : migration create_tests_table

「testsという名前のテーブル用に、マイグレーションファイルを作ってください」という意味になります。

実行すると、「マイグレーションファイルを作りました。」というメッセージが返ってきます。

Created Migration : ~

Laravelをインストールしたフォルダ [database/migrations] 内に、新しくマイグレーションファイルができます。

20xx_xx_xx_xxxxxx create_tests_table.php

マイグレーションファイルは、テーブルを作成したり変更したりするたびに、この場所に作成されていきます。

マイグレーションファイルを編集します

それでは作成したマイグレーションファイルを編集していきます。

まずはテーブルにいれる列(カラム)を入力していきます。

例として、下記の5個の列があるデータテーブルを作成します。

カラム名内容データ型カラムタイプ
id番号bigintid
title投稿のタイトルvarcharstring
body内容texttext
created_at作成日時timestamptimestamp
updated_at更新日時timestamptimestamp
tests テーブル

まずマイグレーションファイルの中身を確認してみましょう。

マイグレーションファイルを開くと、【up】関数の部分に【id】と【timestamp】についてカラム情報ができています。

public function up()
{
Schema :: create('tests', function (Blueprint $table ) {
$table -> id ( );
$table-> timestamps ( );
});
}

※ timestamp は、「データの作成日時」という意味です。

マイグレーションファイルには【timestamps】と複数形で入っておりますが、これで【データの作成日時】と【更新日時】というふたつのカラムを作れます。

デフォルトでは入っていない【title】と【body】の2つのカラムをマイグレーションファイルに追加します。

$table -> id ( ); の下部分に

$table -> string ('title');
$table -> text ('body');

を追加・編集します。

データ型について少し一言

【データの型】とは、どんな種類のデータを入れるかという取り決めです。カラムごとに、データ型を指定します。
MySQLでよく使うデータ型には、次のようなものがあります。

TINYINT小さい整数。符号なしの範囲は0から255まで。ユーザー名やパスワードなど、255文字以内におさまるデータに使える。
INT普通のサイズの整数。数字を入れるものに使える。
VARCHAR可変長文字列。短めのテキストに使える。
TIMESTAMPタイムスタンプ。データベースにデータを更新する際、自動的に現在の日付と時刻を指定できる。
TEXTテキスト情報を入れる。投稿内容などに使える。
MySQLでよく使用するデータ型

マイグレーションファイルを編集した後は、マイグレートを実施します。

これは、「マイグレーションファイルで行った変更を、MySQLにも反映させてください」ということになります。

以下のようにコマンドを入力します。

php artisan migrate

実施後は、テーブルが作成できているかをチェックしてみてください。
作成したデータベースの中の【tests】テーブルに、データができていれば、成功です。

テーブルに変更をしたい時

テーブルに変更を加えたい場合の方法について説明していきます。

例として「user_id」というカラムを追加する方法を解説します。

カラムを追加するには、次のコマンドを実行します。

php artisan make:migration add_user_id_to_tests_table --table=tests

実行すると、「マイグレーションファイルを作りました」というコマンドが返ってきます。

up関数に以下の一行を追加します。

$table->unsignedBigInteger('user_id')->after('id');

※ 例では、符号なしBIGINT というデータ型を用いています。foreignId を使用するのも有りかと思います。

削除するときは、down 関数に以下の一文を追加します。

$table->dropColumn('user_id');

※ 「削除時は、user_id 列を削除してください」という命令文になります。

マイグレートの取り消し

実施したマイグレートを取り消したいという時は、ロールバック(Rollback)を行います。

以下のコマンドを実施します。

php artisan migrate:rollback

いかがでしたか。今回はLaravelのマイグレーションについて解説しました。

Laravel おすすめ学習書

きほんからデータベース連携までLaravelがわかる!

PHPフレームワークのロングセラー定番解説書が、新バージョン対応で改訂! 本書は、Laravelのインストールから、フレームワークの中心になるModel-View-Controller(MVC)の使い方、開発に役立つ各種機能をわかりやすく解説した入門書です。新しいディレクティブ(@csrf/@error)、バリデーションルール(増補解説+自作)、Bootstrapによるぺジネーションリンク、Auth(Laravel/uiパッケージ)の使い方などの項目を追加しました!

Docker & Laravel Sailの最新開発環境で現場のLaravel9を学ぶ!

-PHP-Laravel-, プログラミング