Laravel6 マイグレーションを利用してDBテーブルを作成

Laravel6 マイグレーションを利用してDBテーブルを作成

Laravelのマイグレーション機能を利用してテーブルを作成する手順。 シーディング(Seeding) 機能を使ってデータ作成まで行います。

環境

  • OS CentOS Linux release 7.7.1908 (Core)
  • Laravel 6.5.1
  • DB mysql Ver 8.0.18

DB作成

事前にDBを作成しておく

## ログイン
mysql -u ユーザー名 -p

## DB作成
mysql> CREATE DATABASE laravel;
Query OK, 1 row affected (0.10 sec)

Laravelプロジェクトの作成

ここではprojというプロジェクト名で作成してます

※Laravelの構築手順はこちら

## ディレクトリ作成
sudo mkdir /var/www/html/proj

## プロジェクト作成
composer create-project laravel/laravel /var/www/html/proj --prefer-dist

## 権限変更
sudo chmod 755 /var/www/html/proj

## 移動
cd /var/www/html/proj

Laravel DB接続設定

Laravelプロジェクト配下の.envを編集。今回はmysqlなのでmysqlのみ編集

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root → ユーザー名を変更
DB_PASSWORD= → パスワードを記述

テーブル作成

事前準備が完了したのでマイグレーションを利用してテーブルを作成する。

ここではcustomerというテーブルを作成をします

## コマンド実行
php artisan make:migration create_customer_table

/var/www/html/proj/database/migrations内にyyyy_MM_dd_HHmmss_create_customer_table.phpというファイルが作成されます。

yyyy_MM_dd_HHmmss_create_customer_table.php

<?php

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

class CreateCustomerTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('customer', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamps();
        });
    }

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

このマイグレーションファイル yyyy_MM_dd_HHmmss_create_customer_table.php を編集してテーブルを作成します。

$table->string('name');

を追加します。

public function up()
    {
        Schema::create('customer', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name'); // nameを追加
            $table->timestamps();
        });
    }

テーブル作成。下記のコマンドを実行してテーブルを作成します。

php artisan migrate

<出力結果>
Migrating: yyyy_MM_dd_HHmmss_create_customer_table
Migrated:  yyyy_MM_dd_HHmmss_create_customer_table (0.74 seconds)

テーブルが作成されていることが確認できる

mysql> show columns from customer;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)        | NO   |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

データ作成

シーダーファイルでテーブルのデータを作成します

php artisan make:seeder CustomerTableSeeder

<出力結果>
Seeder created successfully.

/var/www/html/proj/database/seeds内にCustomerTableSeeder.phpが作成されます。

CustomerTableSeeder.php

<?php

use Illuminate\Database\Seeder;

class CustomerTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

この CustomerTableSeeder.php を編集します。

今回はcustomerテーブルのnameに山田太郎という名前を追加します。

public function run()
    {
    //追加
        DB::table("customer")->insert([            
            "name" => "山田太郎",
            "created_at" => new DateTime(),
            "updated_at" => new DateTime()
        ]);
    }

編集後に、下記のコマンドを実行します。

php artisan db:seed --class=CustomerTableSeeder

<出力結果>
Database seeding completed successfully.

customerテーブルにデータが追加されていることがわかります。

mysql> select * from customer;
+----+--------------+---------------------+---------------------+
| id | name         | created_at          | updated_at          |
+----+--------------+---------------------+---------------------+
|  1 | 山田太郎     | 2019-11-14 01:28:40 | 2019-11-14 01:28:40 |
+----+--------------+---------------------+---------------------+

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

ロールバックは下記のコマンドで可能です。

php artisan migrate:rollback

確認してみる

## ソースコード作成
php artisan make:migration create_rollbacktest_table

<出力結果>
Created Migration: 2019_11_14_014551_create_rollbacktest_table

## テーブル作成
php artisan migrate

<出力結果>
Migrating: 2019_11_14_014551_create_rollbacktest_table
Migrated:  2019_11_14_014551_create_rollbacktest_table (0.33 seconds)

## テーブル確認
mysql> show columns from rollbacktest;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+

ロールバックを実行します

## ロールバック実行
php artisan migrate:rollback

<出力結果>
Rolling back: 2019_11_14_014551_create_rollbacktest_table
Rolled back:  2019_11_14_014551_create_rollbacktest_table (0.51 seconds)

ロールバックされていることが確認できます。

## 確認
mysql> show columns from rollbacktest;

<出力結果>
ERROR 1146 (42S02): Table 'laravel.rollbacktest' doesn't exist