9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Laravelでテーブル作成

Last updated at Posted at 2020-06-11

目次

Laravelの記事一覧は下記
PHPフレームワークLaravelの使い方

Laravelバージョン

動作確認はLaravel Framework 7.19.1で行っています

前提条件

eclipseでLaravel開発環境を構築する。デバッグでブレークポイントをつけて止める。(WindowsもVagrantもdockerも)
本記事は上記が完了している前提で書かれています
プロジェクトの作成もapacheの設定も上記で行っています

Laravelでデータベースを扱う準備をする
本記事は上記が完了している前提で書かれています
上記記事で作成したデータベースを使っていきます

マイグレーション生成

コマンドラインで
sample
php artisan make:migration table1
php artisan make:migration table2
php artisan make:migration table3
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します
eclipseプロジェクトを右クリック→リフレッシュ
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table1.phpが現れます
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table2.phpが現れます
/sample/database/migrations/xxxx_xx_xx_xxxxxx_table3.phpが現れます
作成されたファイルの接頭辞がタイムスタンプになっているのは、マイグレーションの実行順をフレームワークに知らせるためです

マイグレーション修正

(1) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table1.phpを下記に修正

xxxx_xx_xx_xxxxxx_table1.php
<?php

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

class Table1 extends Migration
{
    public function up()
    {
        Schema::create('table1', function (Blueprint $table) {
            $table->id()->autoIncrement();
            $table->string('varchar_col', 255)->nullable()->default(null);
            $table->integer('int_col')->nullable()->default(null);
            $table->dateTime('datetime_col')->nullable()->default(null);
            $table->date('date_col')->nullable()->default(null);
            $table->time('time_col')->nullable()->default(null);
            $table->engine = 'InnoDB';
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_bin';
        });
    }

    public function down()
    {
        Schema::dropIfExists('table1');
    }
}

(2) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table2.phpを下記に修正

xxxx_xx_xx_xxxxxx_table2.php
<?php

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

class Table2 extends Migration
{
    public function up()
    {
        Schema::create('table2', function (Blueprint $table) {
            $table->id()->autoIncrement();
            $table->unsignedBigInteger('table1_id')->nullable()->default(null);
            $table->string('varchar_col', 255)->nullable()->default(null);
            $table->integer('int_col')->nullable()->default(null);
            $table->dateTime('datetime_col')->nullable()->default(null);
            $table->date('date_col')->nullable()->default(null);
            $table->time('time_col')->nullable()->default(null);
            $table->engine = 'InnoDB';
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_bin';
        });
    }

    public function down()
    {
        Schema::dropIfExists('table2');
    }
}

(3) /sample/database/migrations/xxxx_xx_xx_xxxxxx_table3.phpを下記に修正

xxxx_xx_xx_xxxxxx_table3.php
<?php

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

class Table3 extends Migration
{
    public function up()
    {
        Schema::create('table3', function (Blueprint $table) {
            $table->id()->autoIncrement();
            $table->unsignedBigInteger('table2_id')->nullable()->default(null);
            $table->string('varchar_col', 255)->nullable()->default(null);
            $table->integer('int_col')->nullable()->default(null);
            $table->dateTime('datetime_col')->nullable()->default(null);
            $table->date('date_col')->nullable()->default(null);
            $table->time('time_col')->nullable()->default(null);
            $table->dateTime('create_datetime')->nullable()->default(null);
            $table->dateTime('update_datetime')->nullable()->default(null);
            $table->engine = 'InnoDB';
            $table->charset = 'utf8mb4';
            $table->collation = 'utf8mb4_bin';
        });
    }

    public function down()
    {
        Schema::dropIfExists('table3');
    }
}

upメソッドに書かれたのはマイグレーションを実行するときのコードです。テーブルを作成しています
downメソッドに書かれたのはマイグレーションをロールバックするときコードです。テーブルを削除しています
Schema::createでcreate tableになります
Schema::createの第二引数に与えているクロージャでカラムを作成しています
$table->integerはinteger型のカラムを作成し、$table->stringはvarchar型のカラムを作成します
作成できるカラムは下記で確認できます
Laravel 7.x データベース:マイグレーション カラム

nullable()はカラムにnullを許容させています
default()はカラムのデフォルト値を設定します
他にもいろいろカラムに設定できます。下記で確認できます
Laravel 7.x データベース:マイグレーション カラム修飾子

マイグレーション実行

コマンドラインで
php artisan migrate
xdebugの設定をしているとeclipseが実行していいですかというプロンプトを出すのでOKを押します

/sample/database/migrationsに格納されているマイグレーションクラスのupメソッドが実行されていきます
/sample/database/migrationsにはもともとusersとfailed_jobsが入っていると思います
そこに今回作成したファイル3つの合計5ファイルが実行されたはずです

確認

MySQLでlaravel_sampleデータベースを確認してみましょう

show tables;
+--------------------------+
| Tables_in_laravel_sample |
+--------------------------+
| failed_jobs              |
| migrations               |
| table1                   |
| table2                   |
| table3                   |
| users                    |
+--------------------------+
6 rows in set (0.001 sec)

テーブルが作成されたことを確認できました

9
5
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
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?