#やりたいこと
開発用のSeederと本番での初期挿入のSeederを分けて使いたい
環境
Laravel7
#やりかた
フォルダ構成を下記のようにする
- database
- seeds
- local
- production
- seeds
まずは適当なSeederクラスを作成して開発と本番のディレクトリにコピー
php artisan make:seeder HogeSeeder
サブディレクトリ内で同一のSeederクラス名をつけたかったのと、
IDEで呼び出すときに補完が効かなくなるので
名前空間を追加
<?php
namespace Database\Seeds\Local;#追加(本番要はLocalの箇所をProductionに)
use App\Hoge;
use Illuminate\Database\Seeder;
class HogeSeeder extends Seeder
{
public function run()
{
factory(Hoge::class, 20)->create();
}
}
あとはDatabaseSeeder
でよびだす
<?php
use Database\Seeds\Local;
use Database\Seeds\Production;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
const LOCAL = [
Lcal\AreasTableSeeder::class,
];
const PROD = [
Production\OccupationsTableSeeder::class
];
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
DB::transaction(function () {
$this->call(App::isLocal() ? self::Local : self::PROD);
});
}
composer dump-autoload