Laravel Seeder永远卡住了

时间:2018-09-23 23:13:41

标签: laravel eloquent

我正在尝试为数据库存储40,000个表的种子。但是播种者花了很长时间,数据库中看不到任何进展。关于如何加快此过程的任何想法。

 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 :(得分:1)

将所有这些都放在一个事务中可以加快执行速度,但同时也可以使这些记录不存在,或者至少在该事务真正提交之前不会保留。由于您要创建超过200,000条伪记录并向数据库运行200,000条插入查询,因此将需要一些时间来运行。

在一个播种机中拥有这么多数据对我来说似乎太过分了。您总是可以创建一个单独的种子机来创建数千个合作伙伴记录,并在您似乎需要大量数据的任何地方多次运行它。我只是无法想象在所有环境中都需要这么多的记录,或者试图为本地数据库提供种子的开发人员。