我正在尝试为数据库存储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中的播种器代码如上所述。
答案 0 :(得分:1)
将所有这些都放在一个事务中可以加快执行速度,但同时也可以使这些记录不存在,或者至少在该事务真正提交之前不会保留。由于您要创建超过200,000条伪记录并向数据库运行200,000条插入查询,因此将需要一些时间来运行。
在一个播种机中拥有这么多数据对我来说似乎太过分了。您总是可以创建一个单独的种子机来创建数千个合作伙伴记录,并在您似乎需要大量数据的任何地方多次运行它。我只是无法想象在所有环境中都需要这么多的记录,或者试图为本地数据库提供种子的开发人员。