## 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`。可以看到:

php think seed:run
好了今天的教程就到這里啦。此篇是小滕的《Thinkphp5入門系列課程》第十三課:Seeder(一)。
喜歡的給個訂閱唄!
**由于作者水平有限,如有錯誤請歡迎指正。**
作者:小滕Tt
鏈接:https://www.jianshu.com/p/d858ae9ce849
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權并注明出處。