前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TP5系列 | 使用Seeder数据填充数据

TP5系列 | 使用Seeder数据填充数据

作者头像
Tinywan
发布2019-08-07 16:16:15
1.9K0
发布2019-08-07 16:16:15
举报
文章被收录于专栏:开源技术小栈

Seeder 的介绍

Seeder 是干嘛用的呢?谷歌翻译为:播种机。

在 Thinkphp5 这里呢,我们叫它 数据填充器。相信大家都有这样的经历:项目开发中,我们经常需要自己手动的模拟数据,在模拟数据之后在进行项目测试,但是自己手动模拟数据太麻烦了,比如,数据格式,需要手写 SQL或者写 foreach 等,其实这上面都是其次

如果项目是多个小伙伴一起开发,小伙伴们使用的是本地的数据库那就蛋疼呐,小伙伴也需要自己模拟相应的数据,或者你备份一份 SQL 文件通过微信传给他,这就显得麻烦了,一件事情一旦重复做过3次,我们就应该考虑用程序去替代手工。

所以呢,Seeder 就出现了,它负责模拟生成项目中需要的数据,它并不是保存数据而是在数据需要的时候只要执行一条命令就能自动的生成,由于事先约定好了数据格式,所以生成的模拟数据基本符合项目情况,这样项目开发中小伙伴们的数据库中的数据都基本一致啦。

Seeder 的创建

在 Thinkphp5 项目中,可以在命令行输入下面这条命令:

代码语言:javascript
复制
php think seed:create VideoSeeder

文件内容

代码语言:javascript
复制
<?php

use think\migration\Seeder;

class VideoSeeder extends Seeder
{
    /**
     * Run Method.
     *
     * Write your database seeder using this method.
     *
     * More information on writing seeders is available here:
     * http://docs.phinx.org/en/latest/seeding.html
     */
    public function run()
    {

    }
}

代码非常的简单,默认的给出了一个 run 方法,现在我们都知道 seeder 文件是用来产生模拟数据的,而产生模拟数据的代码写在 run 方法中就可以了。

seed:run 方法

给数据表 Video模拟生成200条数据

代码语言:javascript
复制
<?php

use think\migration\Seeder;

class VideoSeeder extends Seeder
{
    public function run()
    {
        $rows = [];
        for ($i = 0; $i < 200; $i++) {
            $rows[] = [
                'name' => mt_rand(10000, 99999),
                'email' => mt_rand(10000, 99999).'@qq.com',
                'password' => md5('123456'),
                'upload_time' => time(),
                'user_id' => rand(1111,9999),
            ];
        }

        $this->table('video')->insert($rows)->save();
    }
}

注意:一定要调用 save() 方法,否则不会保存的。

首先,生成了200条数据,然后调用 $this->table('video')->insert($rows)->save();将生成的数据插入到数据库的 Video 表中。

执行 Seeder

Seeder 文件定义好了之后,还必须得执行一下数据才能插入到数据库中,执行命令:

代码语言:javascript
复制
# php think seed:run

 == VideoSeeder: seeding
 == VideoSeeder: seeded 9.1847s

All Done. Took 9.1958s

执行成功提示:All Done. Took 9.1958s。

查看数据表数据

代码语言:javascript
复制
mysql> select * from iot_video;
+-----+-------+--------------+----------------------------------+-------------+---------+
| id  | name  | email        | password                         | upload_time | user_id |
+-----+-------+--------------+----------------------------------+-------------+---------+
|   1 | 65100 | 73821@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 6331    |
|   2 | 34635 | 68202@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 2250    |
|   3 | 56031 | 61995@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 4053    |
|   4 | 29050 | 75373@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 4853    |
|   5 | 86527 | 58361@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 8294    |
|   6 | 21446 | 31573@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 4365    |
...
| 199 | 42923 | 90869@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 4340    |
| 200 | 61223 | 78359@qq.com | e10adc3949ba59abbe56e057f20f883e | 1564908849  | 2455    |
+-----+-------+--------------+----------------------------------+-------------+---------+
200 rows in set (0.37 sec)

数据全部添加完毕了

通过faker模拟生成真实数据

在实际项目开发中,我们需要的数据格式是丰富的,并不是简单的通过生成随机数来模拟真实数据就可以的。

比如说我们要生成可以看得懂的用户呢称,IP地址,用户住址,假图片等我们可能需要的更多信息,如果这些信息要靠我们自己去编写规则显然也是非常麻烦的。

安装 Faker

代码语言:javascript
复制
composer require fzaninotto/faker

地址:https://github.com/fzaninotto/Faker

修改代码

代码语言:javascript
复制
class VideoSeeder extends Seeder
{
    public function run()
    {
        $faker = Faker\Factory::create($locale = 'zh_CN');
        $rows = [];
        for ($i = 0; $i < 100; $i++) {
            $rows[] = [
                'name' => $faker->name,
                'email' => $faker->email,
                'password' => $faker->password,
                'upload_time' => $faker->unixTime,
                'user_id' => rand(1111,9999)
            ];
        }
        $this->table('video')->insert($rows)->save();
    }
}

开始进行数据库填充 (方便测试,先删除以前的数据哦)

代码语言:javascript
复制
# php think seed:run

 == VideoSeeder: seeding
 == VideoSeeder: seeded 4.8271s

All Done. Took 4.8396s

查看数据表数据

代码语言:javascript
复制
mysql> select * from iot_video;
+-----+--------+--------------------------------+----------------------+-------------+---------+
| id  | name   | email                          | password             | upload_time | user_id |
+-----+--------+--------------------------------+----------------------+-------------+---------+
|   3 | 台雪梅 | voluptas_est@yahoo.com         | 6NuLx(SRn/Wp+v10     | 990482227   | 2900    |
|   4 | 伏强   | aperiam.minus@163.com          | o)79cw77Sg=;w        | 308779897   | 5244    |
|   5 | 季欣   | dquis@sohu.com                 | mrm^/`F3k;           | 789426165   | 2889    |
|   6 | 巫婷   | illum80@sina.com               | OmRq}l)tk            | 1545825638  | 8183    |
|   7 | 穆兰英 | vero_vel@sina.com              | $WZpcj};`b~*Ib!      | 1485805110  | 7270    |
|   8 | 纪婕   | delectus.quia@sina.com         | 0U{T0>5OpGQa_o"`     | 1247318429  | 8368    |
|   9 | 沙荣   | rquia@gmail.com                | @R#0't~+sVM*{D8_l    | 319956341   | 2320    |
...
| 100 | 文博   | rerum.adipisci@163.com         | .gq$Dpn=/|i          | 484145624   | 5560    |
| 101 | 揭秀云 | et_alias@sohu.com              | jXyU2m`$^)L0Cxp6im   | 1255679636  | 6511    |
| 102 | 华静   | rerum_incidunt@163.com         | *dF)h4\n             | 123150462   | 6602    |
+-----+--------+--------------------------------+----------------------+-------------+---------+
100 rows in set (0.43 se

生成的数据非常的人性化,测试的时候也就更加方便了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tinywan的杂货摊 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Seeder 的介绍
  • Seeder 的创建
  • 通过faker模拟生成真实数据
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档