はい、今回はseedingの機能を動的に変更しようと思います。
やりたい理由としては、開発環境ではデプロイしたタイミングでseedingを走らせると自動的にテストユーザーが作成できるようになりますが、テストユーザーは本番に必要ありません。
ということでどこでどうやって判断したらよいのだろうか~
そして今回の参考は、「【Laravel】App::environmentとは何か?現在のAPP_ENVの値を調べる方法」を参考にしました。
Table of Contents
伝えたいこと
今回伝えたいことは….
「どうして本番環境か、開発環境かを判別したらいいんだ~~~~!」
っていう悩みを解決しますね。
開発環境ではやる作業だけど、本番だとやらないよねっていう動きとかも、今回の方法を利用すれば対応できます!
しっかり使い分けて、本番でとちらないようにしましょ!
解決方法
前提
今回やりたいことは、php artisan db:seed
コマンドを叩いたときにDatabaseSeeder.php
ファイルが実行されるのですが、そこでの内容を動的に変更してみようと思います。
ちなみにseedingの作り方に関しては以下を参照ください。
具体的な解決方法 App::environment()
今回はUser tableとClub tableの2つがあることを想定します。
ユーザーは本番環境では動的に新規登録、編集が行われます。
一方クラブテーブルは静的なマスターデータで、基本的に更新されることはないとします。
そうすると実装はこうなります↓↓↓
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use DB;
use Illuminate\Support\Facades\App;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call([
ClubsTableSeeder::class, //クラブマスタ
]);
//開発環境の時にのみ実行するseedingは以下に記述する。
if (App::environment('local')) {
$this->call([
UserTableSeeder::class, //テストユーザーの作成
]);
}
}
}
Code language: HTML, XML (xml)
通常特に何も考えない場合は、$this->call([])の中にphp artisan db:seed
コマンドで実行したい、seedingファイルを書き込むと思います。
しかし、今回は開発環境かどうかを判別するために、App::environment()
を利用します。
こちらを使うと今自分が、開発環境か、本番環境かどうかを確認することができるんです。
App:environment()って何か? 公式から確認してみる。
現在のアプリケーション環境は、
.env
ファイルのAPP_ENV
変数により決まります。APP
ファサードのenvironment
メソッドにより、この値へアクセスできます。https://readouble.com/laravel/8.x/ja/configuration.html
environment
メソッドに引数を渡して、環境が特定の値と一致するかどうかを判定することもできます。環境が指定された値のいずれかに一致する場合、メソッドはtrue
を返します。
use Illuminate\Support\Facades\App;
$environment = App::environment();
Code language: PHP (php)
どういうことかというと、Laravelの.envファイルの中で定義されているAPP_ENV
を確認して、そこの値を確認してくれるのがenvironmentメソッドなんです!
すごい便利!
なので、今回は.envファイルのAPP_ENVがlocalとなっているのが、開発環境なので、
条件式(if文)を利用して、開発環境なら○○をする。
という命令を出すことができたわけですね。
まとめ
App::environment();
を使うことによって簡単に自分がどの環境にいるのかを確認することができましたね。
ってか、○○やりたいなあって調べたときに大体なんでも機能がそろっているLaravelすげえって毎回思う。