Laravel の Seeder を本番環境のマスタデータ登録で使用したい

スムージーに入れる果物(リンゴ・レモン)を選ぶ若い女性
スムージーに入れる果物(リンゴ・レモン)を選ぶ若い女性 フリー素材ぱくたそ(www.pakutaso.com)
  • URLをコピーしました!

Laravel の DatabaseSeeder は特別なクラスで、 php artisan db:seed を実行したときに呼び出されるクラスです。
DatabaseSeeder は、 php artisan migrate:fresh --seed などでも利用できるので、開発環境でも活躍します。
今回は、 DatabaseSeeder を本番環境のマスタデータ登録などでも利用したいなーという場合のサンプルを紹介します。

前提条件

  • deployの際に、必ず php artisan migrate --seed を実行する
  • 開発環境と本番環境は、 .env ファイルの APP_ENV で切り替える。 APP_ENV=production のときは本番環境とする
目次

サンプルソースコード

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class GroupsTableSeeder extends Seeder
{

    /**
     * Auto generated seed file
     *
     * @return void
     */
    public function run()
    {
        \DB::table('groups')->upsert([
            ['id' => 1, 'name' => '一般会員', 'description' => '会員登録から登録したばかりのお客さま'],
            ['id' => 2, 'name' => 'ゴールド会員', 'description' => '1年以上継続して登録しているお客さま'],
            ['id' => 3, 'name' => 'プラチナ会員', 'description' => 'ゴールド会員でかつ累計10万円以上ご購入いただいたお客さま'],
            ['id' => 4, 'name' => 'VIP会員', 'description' => 'オーナーまたは店長が推薦するお客さま'],
        ], ['id'], ['name', 'description']);
    }
}

upsert を使う場合、第二引数は Primary Key を指定します!

公式情報 Laravel 8.x Eloquentの準備 更新/挿入
https://readouble.com/laravel/8.x/ja/eloquent.html#upserts

※個人的には、この方法を使用する場合には、 groups テーブルの id は AUTO INCREMENT はしないようにしています!直接指定するので!(^^)/

<?php
namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        if (app()->isProduction()) {
            // 本番環境 .env => APP_ENV=production
            $this->call(GroupsTableSeeder::class);
        } else {
            // 開発環境・検証環境
            $this->call(GroupsTableSeeder::class);
            $this->call(UsersTableSeeder::class);

こうやって作成しておくと、

  • php artisan db:seed を何回実行しても、 groups テーブルのデータはそのまま利用できる。
  • 開発環境と本番環境のマスタデータの差異を無くすことができる!コントロールされたマスタデータは気持ちの良いものです!(^^)/
  • 自動deployを実行するときに、データベースの切り替えと同時にマスタデータの更新もできる!

ツチノコテクノロジーでは一緒に働く仲間を募集しています!

完全リモートで働きたい方へ!

詳しくは以下をご覧ください。

ツチノコテクノロジー採用サイト

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

ツチノコテックアカデミアの記事は、社内で誰かが質問してくれたことに回答したときに、ついでに記載しています!(^^)/
みんなの悩みを共有すれば、きっと誰かの役に立つと信じて更新しています!

目次