Сеялка Laravel застряла навсегда - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь заполнить свою базу данных 40000 записями для таблицы.Но сеялка работает вечно, и в базе данных не видно никакого прогресса.Любая идея о том, как ускорить этот процесс.

 public function run()
    {
        // $this->call(UsersTableSeeder::class);

        factory(\App\Model\Workflow::class, 10)->create();
        factory(\App\Model\WorkflowStage::class, 100)->create();
        factory(\App\Model\PartnerCategory::class, 10)->create();



        \Illuminate\Database\Eloquent\Model::unguard();
        \Illuminate\Support\Facades\DB::beginTransaction();

        factory(\App\Model\Partner::class, 40000)->create()->each(function ($partner) {

            $partner->contact()->save(factory(\App\Model\PartnerContact::class)->make());
            $partner->address()->save(factory(\App\Model\PartnerAddress::class)->make());
            $partner->contract()->save(factory(\App\Model\PartnerContract::class)->make());

        });

        factory(\App\Model\PartnerBranch::class, 1000)->create();
        factory(\App\Model\Product::class, 1000)->create();

        factory(\App\Model\Client::class, 20000)->create()->each(function ($client) {
            $client->contact()->save(factory(\App\Model\Contact::class)->make());
            $client->contact()->save(factory(\App\Model\Address::class)->make());
            $client->contact()->save(factory(\App\Model\Education::class)->make());
            $client->contact()->save(factory(\App\Model\Visa::class)->make());
        });

        \Illuminate\Support\Facades\DB::commit();
        \Illuminate\Database\Eloquent\Model::reguard();

    }

Мой код отправителя в DatabaseSeeder такой же, как и выше.

1 Ответ

0 голосов
/ 24 сентября 2018

Наличие всего этого в одной транзакции ускорит выполнение, но также сделает так, чтобы эти записи не существовали или, по крайней мере, не сохранялись до тех пор, пока эта транзакция фактически не будет принята.Поскольку вы создаете более 200 000 поддельных записей и выполняете более 200 000 запросов на вставку в базу данных, это займет некоторое время.

Слишком много данных в одной сеялке мне кажется чрезмерным.Вы всегда можете создать отдельную сеялку, чтобы создать несколько тысяч записей Партнеров и запускать их несколько раз, когда вам, по-видимому, понадобится заполнить эти данные.Я просто не могу себе представить, что мне нужно столько записей во всех средах или для разработчиков, пытающихся заполнить свою локальную базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...