下面由laravel教程栏目给大家介绍Laravel Seeder生成百万模拟数据,希望对需要的朋友有所帮助!

Laravel 集成了 Faker 库,并提供了 Seeder 可以帮助我们轻松地生成模拟数据。
先书写数据仓库和数据填充代码
数据仓库代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | use App\Models\Topic; use Faker\Generator as Faker; $factory ->define(Topic:: class , function (Faker $faker ) {
$sentence = $faker ->sentence();
$updated_at = $faker ->dateTimeThisMonth();
$created_at = $faker ->dateTimeThisMonth( $updated_at );
return [
'title' => $sentence ,
'body' => $faker ->text(),
'excerpt' => $sentence ,
'created_at' => $created_at ,
'updated_at' => $updated_at ,
];});
|
Salin selepas log masuk
数据填充代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | class TopicsTableSeeder extends Seeder{
public function run()
{
$user_ids = User::all()->pluck( 'id' )->toArray();
$category_ids = Category::all()->pluck( 'id' )->toArray();
$faker = app(Faker\Generator:: class );
$topics = factory(Topic:: class )
->times(1000)
->make()
->each( function ( $topic , $index ) use ( $user_ids , $category_ids , $faker ){
$topic ->user_id = $faker ->randomElement( $user_ids );
$topic ->category_id = $faker ->randomElement( $category_ids );
});
Topic::insert( $topics ->toArray());
}}
|
Salin selepas log masuk
我们通过是 times() 设置了填充的次数,执行数据填充命令,可以将 1000 条数据填充至 topics 表中,这很方便。
1 | php artisan db:seed -- class =TopicsTableSeeder
|
Salin selepas log masuk
如果我们想要插入 100w 条数据,是不是把 times() 的参数改为 1000,000 就可以了?当你这样做之后,你会发现如下报错
1 | General error: 1390 Prepared statement contains too many placeholders
|
Salin selepas log masuk
这个问题是因为 mysql 默认支持的占位符最多为 65535(2^16-1) 个,写入数据为 m 列,n 行。m*n 必须小于 65535。
所以没法一次性插入大量数据,查了一下 php artisan db:seed
也没有提供执行次数的相关参数。
最后,决定使用 shell 脚本进行解决。
1 2 | for (( i = 0; i < 1000; i++ )); do
/usr/local/bin/php artisan db:seed -- class =TopicsTableSeederdone
|
Salin selepas log masuk
等待片刻,你会发现 100w 数据已经生成完毕!
PS:数据仓库和数据填充代码来自 larabbs
推荐:最新的五个Laravel视频教程
Atas ialah kandungan terperinci 详解Laravel Seeder如何生成百万模拟数据. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!