読む前に
本記事のほとんどは茶番です、ご了承ください
登場人物
後輩
趣味はYoutubeでひろゆきチャンネルを見漁ること
給料の半分をライブ配信のスパチャに使っている
先輩A
先輩Bが嫌いなひろゆき
先輩B
先輩Aが嫌いなひろゆき
本番リリース前日
後輩「本番リリースって明日すか? 「はい」か「いいえ」で答えてください」
先輩A「はいかいいえです」
後輩「関連会社のデータ流し込まなきゃいけないと思うんすけど、なんかそういうスクリプトってあるんすか?」
先輩A「ないと思います、はい」
先輩A「さっさと専用のSeeder作っちゃえばいいと思いまーす」
後輩「なんすかSeederって」
唐突なChatGPT「LaravelのSeederは、データベースに初期データを挿入するためのクラスです。」
後輩「作ったんでレビューお願いしまーす!」
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Factories\Sequence;
use App\Models\Company;
class CompanySeeder extends Seeder
{
private const COMPANIES = [
['name' => '会社A', 'address' => '東京都A区'],
['name' => '会社B', 'address' => '東京都B区'],
['name' => '会社C', 'address' => '東京都C区'],
['name' => '会社D', 'address' => '東京都E区'],
...
];
public function run()
{
Company::factory()
->count(count(self::COMPANIES))
->sequence(fn ($sequence) => self::COMPANIES[$sequence->index])
->create();
}
}
class DatabaseSeeder extends Seeder
{
public function run()
{
$this->call([
CompanySeeder::class,
]);
}
}
先輩A「factory使って効率的に書いてて優秀っすね」
先輩A「いいと思いまーす」
本番リリース当日
先輩B「本番サーバー入ってシーダー実行してもらっていいすか?」
後輩「php artisan db:seed
っと」
後輩「Class Faker\Factory not found
のエラー出たっすね」
先輩B「composer.json
の"require-dev"
に"fakerphp/faker
ってあると思うんですけどー」
{
"require-dev": {
"fakerphp/faker": "^1.19"
}
}
先輩B「本番でcomposer install
する時に--no-dev
のオプション付けているんでこいつ入ってないんすよね」
後輩「はっ」
先輩B「factoryじゃなくてEloquentで書いてもらっていいすか?」
後輩「なんすか?Eloquentって」
先輩B「だめだコレ...」
後輩「あ…すいません、なんか。言葉を知らなくて」
後輩「なんかその…例えば『Eloquent』って言葉の意味を僕は知らないんですけど、一般の人的にも多分そんなに常識的な言葉じゃないですよね? それを持ち出して『だめだコレ』って言われても…失礼じゃないですか?」
先輩A「なんだろう...後輩いじめるのやめてもらっていいすか?」
先輩B「さーせん」
結論
dev用パッケージを本番でもインストールするのが何だか気持ち悪いのでBulkInsertで
class CompanySeeder extends Seeder
{
private const COMPANY_NAMES = [
['name' => '会社A', 'address' => '東京都A区'],
['name' => '会社B', 'address' => '東京都B区'],
['name' => '会社C', 'address' => '東京都C区'],
['name' => '会社D', 'address' => '東京都D区'],
];
public function run()
{
Company::insert(self::COMPANY_NAMES);
}
}