41
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事誰得? 私しか得しないニッチな技術で記事投稿!

本番にデータ流し込んでもらっていいすか?→「Class Faker\Factory not found」

Last updated at Posted at 2023-06-27

読む前に

本記事のほとんどは茶番です、ご了承ください

登場人物

後輩
趣味はYoutubeでひろゆきチャンネルを見漁ること
給料の半分をライブ配信のスパチャに使っている

先輩A
先輩Bが嫌いなひろゆき

先輩B
先輩Aが嫌いなひろゆき

本番リリース前日

後輩「本番リリースって明日すか? 「はい」か「いいえ」で答えてください」

先輩A「はいかいいえです」

後輩「関連会社のデータ流し込まなきゃいけないと思うんすけど、なんかそういうスクリプトってあるんすか?」

先輩A「ないと思います、はい」
先輩A「さっさと専用のSeeder作っちゃえばいいと思いまーす」

後輩「なんすかSeederって」

唐突なChatGPT「LaravelのSeederは、データベースに初期データを挿入するためのクラスです。」

後輩「作ったんでレビューお願いしまーす!」

CompanySeeder.php
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();
    }
}
DatabaseSeeder.php
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ってあると思うんですけどー」

composer.json
{
    "require-dev": {
        "fakerphp/faker": "^1.19"
    }
}

先輩B「本番でcomposer installする時に--no-devのオプション付けているんでこいつ入ってないんすよね」

後輩「はっ」

先輩B「factoryじゃなくてEloquentで書いてもらっていいすか?」

後輩「なんすか?Eloquentって」

先輩B「だめだコレ...」

後輩「あ…すいません、なんか。言葉を知らなくて」
後輩「なんかその…例えば『Eloquent』って言葉の意味を僕は知らないんですけど、一般の人的にも多分そんなに常識的な言葉じゃないですよね? それを持ち出して『だめだコレ』って言われても…失礼じゃないですか?」

先輩A「なんだろう...後輩いじめるのやめてもらっていいすか?」

先輩B「さーせん」

結論

dev用パッケージを本番でもインストールするのが何だか気持ち悪いのでBulkInsertで

CompanySeeder.php
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);
    }
}
41
5
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
41
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?