# 13. factories, faker and seeding 本来是要来介绍 view 中的 foreach 功能,这个功能需要很多数据,因为是循环嘛。 所以要先创建好多数据。 在开发环境中,我们经常需要创建一些用于测试的假数据。 如果你是一名 `ruby on rails` 开发者,可能用过下面这两个 `gem`。 <https://github.com/stympy/faker> <https://github.com/ffaker/ffaker> 它们就是用来创建假数据的。 比如说,你要创建一百条用户数据,而每个用户名或邮箱是不同的,这个时候,其实我们用随机的字符串就好了,可是这个叫 `faker` 的东西,能让我们的用户名更接近于现实,可读性更强。 在 `laravel`,默认就有这样的功能,我们来介绍一下。 找到 `database/factories/ModelFactory.php` 文件,内容如下: ``` <?php $factory->define(App\User::class, function (Faker\Generator $faker) { static $password; return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'password' => $password ?: $password = bcrypt('secret'), 'remember_token' => str_random(10), ]; }); ``` 代码也不复杂,使用的是 `App\User::class` 这个 model,`$faker->name` 表示随机的用户名,其他的也比较好解释,密码都为 `secret`。 怎么引用这个 factory 呢? 找到 `database/seeds/DatabaseSeeder.php` 文件,修改如下: ``` <?php // database/seeds/DatabaseSeeder.php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { public function run() { // 新增这一行 factory(App\User::class, 100)->create(); // $this->call(UsersTableSeeder::class); } } ``` 怎么来执行这个 seed 呢? 在终端上输入如下指令: ``` $ php artisan db:seed ``` 执行完之后数据表 `users` 会多出一百条记录: ![](https://box.kancloud.cn/fd9b95a01a7a03e23f4a9f9d09620ef2_2228x1102.png) 试着用任何一个新创建的用户登录试试。 登录地址是 `http://127.0.0.1:8000/login`,密码是 `secret`。 完结。