LoginSignup
2
1

More than 1 year has passed since last update.

Laradoc×Dockerでマイグレーション

Posted at

前提条件

  • mac Big Sir(intel core)
  • LaraDockで環境構築済

※ 今回はマイグレーションの話なので、基本的な操作や概念は変わりませんが、マイグレーションのコマンドがDockerのワークスペースに入って行うので、多少異なっています。

参考:Laravel8.x マイグレーション

テーブルとマイグレーションファイルを作るコマンド

※ 必ず、Docker Desktopを立ち上げて、laradocディレクトリで
$ docker-compose up -d workspace php-fpm nginx mysql phpmyadmin
のように起動させた状態で行う。

$ docker-compose exec workspace+コマンド
で、Dockerのワークスペースに入らなくてもコマンドを実行できる。

そのため、マイグレーションコマンドは以下のようになる。
必ずlaradocのディレクトリに移動してから以下のコマンドを実行する。

laradoc$ docker-compose exec workspace php artisan make:model テーブル名 --migration

末尾にオプション--migrationをつけると、テーブルを作ると同時に、マイグレーションファイルを作ってくれるので、そのマイグレーションファイルを開いて、どんなカラムが欲しいか書いていくときに使える。

マイグレーションファイルの所在

マイグレーションファイルはアプリケーションフォルダに存在するので、laradocフォルダの中ではなく、兄弟フォルダのアプリケーションフォルダの中にあるdatabase/migration/の中に作られていく。

テーブルができたら、ここを開いてカラムの指定を書いていこう。

マイグレーションファイルのファイル名の読み方

ファイル名は以下のように、日付と通し番号の後にcreate+テーブル名.phpになってる。

2014_10_12_100000_create_password_resets_table.php

public function up()の読み方

テーブルを作るときに、なんて名前のテーブルで、どんなカラムを作るのか?という指示をここに書き込む。

サンプル

public function up()
    {
        Schema::create('password_resets', function (Blueprint $table) {
            $table->string('email')->index();
            $table->string('token');
            $table->timestamp('created_at')->nullable();
        });
    }

これを元に説明します。

Schemaクラス

MySQLでもPostgreSQLでも、どんなデータベースでも操作できる魔法のクラス集

Schema::create()

テーブルを作るために使えるようにSchemaクラスが持ってるメソッド。
テーブル使いたい時にはこれ使う。

Schema::create('テーブル名', function (Blueprint $table) {ここに欲しいカラムについて書く}

第一引数にテーブル名、第二引数にどんなカラムが欲しいのか渡す関数を設定。
第二引数の関数に渡されてる引数でBlueprintはスキーマビルダとかいう新しいテーブルを定義するためのオブジェクト。$tableはテーブルオブジェクト。両方いつも使う決まり文句なので深く考えないで使いまわそう。

カラムの定義のやり方

基本は以下のような構成で書く

$table->カラムの型('カラムの名前')->カラム修飾子();

$table->bigIncrements('id');

idみたいな勝手に管理番号を割り振っておいてほしい物には$table->bigIncrements()こんな感じで書く。

$table->timestamps();

テーブルに作成日時と、更新日時を追加したいときは、これ書くと勝手にcreated_atカラムとupdated_atカラム作ってくれる。2個書かなくていい。便利。
$table->timestamp('created_at')->nullable();と、作成日時が欲しい時は引数に渡してあげるとこんな感じで書く。

->nullable()Column Modifiers(カラム修飾子)とかいうもので、ここにはnullが入ってもいいよ指定。

Column Modifiers

カラムの名前とカラムの型を指定するだけじゃなくて、

public function down()の読み方

ここに書くと、そのテーブルを消したいときに何をやって欲しいか?を指示できる。

サンプル

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

Schema::dropIfExists

Schema::dropIfExists('テーブル名');で、消したいテーブル名を引数に入れると、消してくれるメソッド。
消すだけなのでここは記述量が少ない。簡単。

マイグレーションファイルを変更したらマイグレーションの実行

laradoc$ docker-compose exec workspace php artisan migrate

Migration table created successfully.て出たら成功。

データを入れてどんな表示になるか見たい…そうだSeederだ!

テーブルにSQLをぽちぽち打ってデータを挿入しなくても、Seederを使えば連想配列でデータを入れてくれて、ちょっとだけ楽できてチームで共有もできる…そんな便利機能がSeederです。

Seederファイルを作って連想配列を書く

以下のコマンドでテーブルごとに挿入したいデータを記述するSeederファイルを作ります

laradoc$ docker-compose exec workspace php artisan make:seeder ファイル名

Seeder created successfully.と出たら成功。

アプリケーションフォルダ/database/seedsにファイル名.phpというファイルが生成されます。
開くと、以下のような記述がありまます。

    public function run()
    {
        // ここに入れたいデータの連想配列を書いていく
    }

連想配列で登録したいデータを書いていきます。

public function run()
    {
        DB::table('テーブル名')->insert([
          [
            'カラム名1' => データ1,
            'カラム名2' => データ2,
          ],
          [
            'カラム名1' => データ3,
            'カラム名2' => データ4,
          ],
        ]);
    }

さっきのファイルが実行されるようにDatabaseSeeder.phpを変更

アプリケーションフォルダ/database/seeds/DatabaseSeeder.phpを開く。
すると以下のような記述があるのでここをカスタマイズする。

    public function run()
    {
        // $this->call(UsersTableSeeder::class);
    }

さっき連想配列を書いたファイル名は、その中でファイル名と同じクラスが作られていて、そのクラスの中に連想配列を書いた。

なので、ファイル名=クラス名なので、ここではもともと入っていてコメントアウトされてる
// $this->call(UsersTableSeeder::class);
を利用して、ファイル名を書き込んであげるだけでOK!

    public function run()
    {
        $this->call(ファイル名::class);
    }

Seeder実行

laradocディレクトリにいることを確認してから、

laradoc$ docker-compose exec workspace php artisan db:seed

Database seeding completed successfully.と出れば成功!

2
1
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
2
1