## Seeder 的介绍
前面两篇文章我给大家讲解了 Migration 的使用,今天就给大家讲解下 Seeder 的使用。Seeder 是干嘛用的呢?谷歌翻译为:**播种机**。在 `Thinkphp5` 这里呢,我们叫它 **数据填充器**。相信大家都有这样的经历:项目开发中,我们经常需要自己手动的模拟数据,在模拟数据之后在进行项目测试,但是自己手动模拟数据太麻烦了,比如,数据格式,需要手写 SQL或者写 foreach 等,其实这上面都是其次,如果项目是多个小伙伴一起开发,小伙伴们使用的是本地的数据库那就蛋疼呐,小伙伴也需要自己模拟相应的数据,或者你备份一份 SQL 文件通过微信传给他,这就显得麻烦了,一件事情一旦重复做过3次,我们就应该考虑用程序去替代手工。所以呢,Seeder 就出现了,它负责模拟生成项目中需要的数据,它并不是保存数据而是在数据需要的时候只要执行一条命令就能自动的生成,由于事先约定好了数据格式,所以生成的模拟数据基本符合项目情况,这样项目开发中小伙伴们的数据库中的数据都基本一致啦。
## Seeder 的创建
在 Thinkphp5 项目中,我们可以在命令行输入下面这条命令:
~~~
php think seed:create UserSeeder
~~~
创建一个 `UserSeeder` 文件,创建成功之后你可以在 `database/seeds` 目录下面看到:
~~~
database
|-seeds
|-|-UserSeeder.php
~~~
其内容如下:
~~~
<?php
use think\migration\Seeder;
class UserSeeder 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` 方法中就可以了。
## Seeder 的 run 方法
在 `run` 方法中,我们可以随意填写了可以填充数据库的任意代码。这里我就抛砖引玉啦:
**要求:**
给数据表 `Users` 模拟生成100条数据。表结构如下:
| 字段 | 说明 |
| --- | --- |
| `nickname` | 呢称 |
| `email` | 邮箱 |
| `password` | 密码 |
收到需求后,我可以这样写:
~~~
<?php
use think\migration\Seeder;
class UserSeeder 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()
{
$rows = [];
for ($i = 0; $i < 100; $i++) {
$rows[] = [
'nickname' => mt_rand(10000, 99999),
'email' => mt_rand(10000, 99999).'@qq.com',
'password' => md5('123456'),
];
}
$this->table('users')->insert($rows)->save();
}
}
~~~
> 注意:一定要调用 `save()` 方法,否则不会保存的。
首先呢,我生成了100条数据,然后调用 `$this->table('users')->insert($rows)->save();` 将生成的数据插入到数据库的 `Users` 表中。是不是很简单? ^ - ^.
## 执行 Seeder
Seeder 文件定义好了之后,还必须得执行一下数据才能插入到数据库中,我们可以这样执行:
~~~
php think seed:run
~~~
执行成功提示: `All Done. Took 0.0552s`。可以看到:
![](//upload-images.jianshu.io/upload_images/4047909-9bff74036dad2e2a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/514/format/webp)
php think seed:run
好了今天的教程就到这里啦。此篇是小滕的《Thinkphp5入门系列课程》第十三课:Seeder(一)。
喜欢的给个订阅呗!
**由于作者水平有限,如有错误请欢迎指正。**
作者:小滕Tt
链接:https://www.jianshu.com/p/d858ae9ce849
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。