LoginSignup
0
2

More than 1 year has passed since last update.

LaravelでDBのテーブルを作成する(マイグレーション)

Last updated at Posted at 2022-08-09

WEBアプリとデータベースの関係性

ブログや会員制サイトのように、ログイン機能や
情報を登録、表示、修正、削除などの操作をするためには
情報を表示するWEBサイトと情報を溜め込むための記憶媒体
データベース(以下、DBと略称)が必要です

DBはレンタルサーバーやローカルサーバーに
配置することができ、管理するためには
MySQLなどのソフトをインストールする必要があります

WEBアプリとは高度な機能を持ったWEBサイトの総称で
youtube,amazon,Facebookなどユーザーによって
操作が可能なサイトもWEBアプリと言えます

マイグレーションとは

マイグレーションとは古いアプリケーション
(ソフトウェア、データ、通信環境)の資産を
新しい環境へ移行させることを指します

具体的に古いPCから新しいPCに
データを移行させる手順も
マイグレーションと言えます

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

マイグレーションファイルという
テーブルの設計図を作成しておき
連携するDBへコマンドで設計図の内容を反映させ
DBにテーブルを作成する方法を指します

マイグレーションとSQLの違い

SQLはDBへ命令することでテーブルを作成したり
操作することができるプログラミング言語になります

マイグレーションはマイグレーションファイルという
テーブル情報の設計図を作成しコマンドを実行することで
一気にテーブルを作成する手段を指します

SQLと異なるメリットとして
マイグレーションを実行後にはファイルが残るため
履歴管理やロールバック(元の状態に戻す)ことが
でき安全かつ保守性が高い手法になります

マイグレーションファイルを生成する

次のコマンドを実行することで
Laravelのフレームワークに
マイグレーションファイルの雛形が生成されます


① カレントディレクトリをプロジェクトファイルにします

$ cd /Applications/MAMP/htdocs/①*******


② マイグレーションファイルを生成するコマンドを実行します
php artisan make:migration create_②#####_table --create=②#####


-----解説-----

・"①*******"は作成したプロジェクト名を記述します
・"create_②#####_table"は作成したい任意のテーブル名を記述します
・"②#####"は作成したい任意のテーブル名を記述します
・createオプションにテーブル名を追加することで雛形にテーブル名が反映されます


マイグレーションファイルの命名規則

マイグレーションファイルの名前を決める際には
次の命名規則を守りましょう。

テーブルを新規作成する

テーブルの命名規則

記法 複数or単数
スネークケース 複数形 users / item_tables
テーブル命名規則(例1).
・テーブルを新規で追加するとき

create_tests_table

-----解説-----
・「テーブルを作成する」意味なのでテーブル名の前後に"create"と”table”付与します
・単語をつなぐ際はアンダーラインを用いてスネークケースで繋ぎます

テーブル命名規則(例2).
$ php artisan make:migration create_tests_table --create=tests


既存のテーブルにカラム(列)を追加する

カラム追加の命名規則(例1).
add_name_to_tests_table

-----解説-----
・「テーブルにカラム(列)を追加する」意味なので以下をスネークケースで繋ぎます
"add"_”カラム名”_"to”_"テーブル名"_"table"
カラム追加の命名規則(例2).
・カラムを追加するとき
php artisan make:migration add_name_to_tests_table --table=tests

-----解説-----
・tableオプションに"カラム名"を追加する先のテーブル名を記述します

ファイルの生成場所

database/migrations

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

作成された雛形を編集することでテーブルに
追加したいカラム名やデータ型を指定できます

   Schema::create('テーブル名', function (Blueprint $table) {
            $table->bigIncrements('id');
            // 以下のようにカラム(列)を追加する
            $table->string('カラム名');
            $table->text('カラム名');

            $table->timestamps();
        });

 -----解説-----
// ファイル生成の際にオプションを設定するとテーブル名雛形に反映されています
// "id"は主キーのため必須項目であり削除するとエラーが発生します
// bigIncrementsメソッドは、自動増分を示します
// "timestamps"も必須項目であり削除するとエラーが発生します
// "text"や"string"などのデータ型は任意の型を設定します



主キーとは

データベースのデータを一意(重複しない値)に識別するための項目のこと
修正、削除、更新の操作で主キーがなければレコードを特定できないため
必ず必要なカラムになります。

データ型の種類

テーブルのデータ型を指定し、入力されるデータの範囲を指定すれば
誤ったデータがカラムに入力されることを防ぐことができます

データ型 種類
integer 数値(整数)
decimal 数値(精度の高い小数)
float 数値(浮動小数)
string 文字(短い文字列)
text 文字(長い文字列)
date 日付
datetime 日時
time 時刻
timestamp タイムスタンプ
binary バイナリ
boolean 真偽

timestampで作成日時と更新日時のカラムを作成

$table->timestamps();

追加するカラムにtimestampsのデータ型を指定すると
データベースのカラムに自動で
created_at と updated_atが作成されます

timestampsの引数にはカラム名は必要ありません

生成されたマイグレーションファイル

次のようなコマンドでマイグレーションファイルを生成すると
成功すれば次のようなインフォメーションが表示され
マイグレーションファイルが生成されています

テーブル命名規則(例2).
$ php artisan make:migration create_tests_table --create=tests

スクリーンショット 2023-04-06 18.12.20.png

生成されたマイグレーションファイル

自動で生成した日付などがファイル名の前に付与されます
スクリーンショット 2023-04-06 18.18.11.png

最初から存在するマイグレーションファイル

migrationsフォルダにはすでにマイグレーションファイルが
存在する場合があります。

LaravelにはWEBアプリの認証機能(ログイン機能)を
自動で作成してくれる機能があります

認証機能を作成するには連携するDBに
usersテーブルが必要になる他
実装に対して様々なテーブルが必要になるため
存在する既存のマイグレーションファイルは削除せず
まとめて実行しましょう

スクリーンショット 2023-04-08 23.12.47.png

マイグレーションを実行する

.envファイルに連携するDBの情報を
上書きすることでマイグレーションを
実行した際に対象のDB名へテーブルが作成されます

.envファイルは隠しファイルなので
隠しファイルを見れるよう設定します

「command」+「shift」+「.」 (MACの場合)

スクリーンショット 2023-04-05 10.16.58.png

スクリーンショット 2023-04-07 9.09.52.png

テスト用に次のようなマイグレーションファイルを
作成しました

スクリーンショット 2023-04-07 8.59.52.png

2023_04_06_234954_create_products_table.php

<?php

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('company_id');
            $table->string('product_name');
            $table->integer('price');
            $table->integer('stock');
            $table->text('comment');
            $table->string('img_path');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('products');
    }
};


マイグレーションの内容を実行する

コマンド
$ php artisan migrate

上記のコマンドでマイグレーションファイルの内容を
データベースに反映することができます。

スクリーンショット 2023-04-07 9.06.48.png

スクリーンショット 2023-04-07 9.17.17.png

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

マイグレーションを実行したファイルは
マイグレーション済とステータスが記録されるため
再度使用することができません

次のコマンドで確認ができます

※テスト用にマイグレ未実施の
 コピーファイルを配置しています

スクリーンショット 2023-04-07 9.29.40.png

マイグレーション済みのファイルを確認する

$ php artisan migrate:status

すでに実行されている場合はRan
保留中の場合はPending 
になります

スクリーンショット 2023-04-07 9.33.28.png

マイグレーションファイルは繰返し使用できない

マイグレーション済になったファイルはファイル内部を
編集してもマイグレーションを再度実行することはできません

マイグレーション済の判断基準はファイル名に依存するため
ファイル名をリネームするか、新しいマイグレーションファイルを
作成することでマイグレーションを繰返し実行することができます

リネームする場合はファイル名の日付部分を適当に
修正するだけでマイグレーションファイルが
使用可能になります


2022_08_09_******_create_products_table.php

マイグレーションを元に戻す(ロールバック)

次のコマンドを実行することで
最後に実行したマイグレーションを
元の状態に戻すことができます

マイグレーションでテーブルを作成していた場合は
テーブルが削除されますので注意してください

ロールバックを実行すると
作成していたマイグレーションが
保留中の状態に戻るため再度
マイグレーションを実行することができますl。

$ php artisan migrate:rollback

モデルの命名規則

LaravelでDBを操作するには
モデルと呼ばれるプログラムファイルが必要です

モデルのファイル名を決定する場合は
次の命名規則に従うと綺麗な
プログラムに仕上がります

記法 複数or単数
アッパーキャメル 単数 UserData
0
2
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
0
2