不败君

前端萌新&初级后端攻城狮

使用 Laravel 填充一百万假数据

发表:2019-12-02 19:21:04

围观(181)

创建数据表

创建一个 posts 数据库,表含字段:id(int 主键、自增) name(varchat) content(text) created_at(timestamp) updated_at(timestamp)

可用 Laravel 的数据迁移或手动创建,文档有很详细的讲解,本文就不细说了。


创建模型

创建一个名为 Post 的模型,可使用命令:

php artisan make:model Post


生成 Seeder

php artisan make:seeder PostsTableSeeder

生成后,该文件存放于项目根目录下的 database/seeds 需要打开并编辑该文件。

编写 run 方法,例如这样写:

$posts = factory(App\Post::class, 1000000)->make(); 
App\Post::insert($posts->toArray());


生成模型工厂

可以执行以下命令创建模型工厂并指示工厂创建模型的名称。

php artisan make:factory PostFactory --model=Post

生成后,该文件存放于项目根目录的 database/factories

编辑该文件,将 define 方法的数组写入:

$factory->define(Post::class, function (Faker $faker) {
    return [
        'name' => $faker->name,
        'content' => $faker->text,
    ];
});


调用数据填充

编辑项目根目录的 database/seeds/DatabaseSeeder.php 文件

例如编辑为这样:

public function run()
{
    // $this->call(UsersTableSeeder::class);
    $this->call([
        PostsTableSeeder::class,
    ]);
}


运行数据填充

运行前,需要先重新生成 Composer 的自动加载器,执行命令:

composer dump-autoload

然后开始执行数据填充:

php artisan db:seed

如果原本就已经生成了很多个数据填充,可以这样指定执行某个数据填充:

php artisan db:seed --class=PostsTableSeeder

执行后可能会需要等待一段时间,根据电脑配置高低,执行所需时间也不一样。

如果实在太慢,可以减低每次执行入库的数量。比如改成这样:

$posts = factory(App\Post::class, 20000)->make(); 
App\Post::insert($posts->toArray());

然后手动执行 50 次,就能够有一百万条记录了。


常见错误

如果发生报错:

WhoopsRun::handleError("Allowed memory size of 26843545
6 bytes exhausted (tried to allocate 134217736 bytes)", "C:Us
ersxxxDesktop	estvendorlaravelframeworksrcIlluminat
eDatabaseEloquentFactoryBuilder.php")

那就是内存不够,去 PHP.INI 设置更大的内存,然后重启 Apache / Nginx


更简单

如果你只想要一百万条数据进行测试,可以下载这个:https://pan.baidu.com/s/1Zrq5_olFa3ztBKWrzFYrhw 提取码:ndab

这是生成的一百万条数据的 SQL

本文地址 : bubaijun.com/page.php?id=153

版权声明 : 未经允许禁止转载!

评论:我要评论
发布评论:
Copyright © 不败君 粤ICP备18102917号-1

不败君

首 页 作 品 微 语