文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Laravel Seeder怎么生成百万模拟数据

2023-06-14 08:45

关注

这篇文章主要介绍了Laravel Seeder怎么生成百万模拟数据,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

Laravel 集成了 Faker 库,并提供了 Seeder 可以帮助我们轻松地生成模拟数据。

先书写数据仓库和数据填充代码

数据仓库代码

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,    ];});

数据填充代码

 class TopicsTableSeeder extends Seeder{        public function run()    {        // 所有用户ID数组,如:[1,2,3,4]        $user_ids = User::all()->pluck('id')->toArray();        // 所有分类 ID 数组,如:[1,2,3,4]        $category_ids = Category::all()->pluck('id')->toArray();        // 获取 Faker 实例        $faker = app(Faker\Generator::class);        $topics = factory(Topic::class)            ->times(1000)            ->make()            ->each(function ($topic, $index) use ($user_ids, $category_ids, $faker){                // 从用户 ID 数组中随机取出一个并赋值                $topic->user_id = $faker->randomElement($user_ids);                // 话题分类,同上                $topic->category_id = $faker->randomElement($category_ids);            });        // 将数据集合转换为数组,并插入到数据库中        Topic::insert($topics->toArray());    }}

我们通过是 times() 设置了填充的次数,执行数据填充命令,可以将 1000 条数据填充至 topics 表中,这很方便。

php artisan db:seed --class=TopicsTableSeeder

如果我们想要插入 100w 条数据,是不是把 times() 的参数改为 1000,000 就可以了?当你这样做之后,你会发现如下报错

General error: 1390 Prepared statement contains too many placeholders

这个问题是因为 mysql 默认支持的占位符最多为 65535(2^16-1) 个,写入数据为 m 列,n 行。m*n 必须小于 65535。

所以没法一次性插入大量数据,查了一下 php artisan db:seed 也没有提供执行次数的相关参数。

最后,决定使用 shell 脚本进行解决。

for (( i = 0; i < 1000; i++ )); do    /usr/local/bin/php artisan db:seed --class=TopicsTableSeederdone

等待片刻,你会发现 100w 数据已经生成完毕!

PS:数据仓库和数据填充代码来自 larabbs

感谢你能够认真阅读完这篇文章,希望小编分享的“Laravel Seeder怎么生成百万模拟数据”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯