1、生成模型工厂
php artisan make:factory PostFactory
生成的模型工厂位于database/factories目录下
2、编写工厂
我们来看一下自带的UserFactory
<?php
use Faker\Generator as Faker;
/*
|--------------------------------------------------------------------------
| Model Factories
|--------------------------------------------------------------------------
|
| This directory should contain each of the model factory definitions for
| your application. Factories provide a convenient way to generate new
| model instances for testing / seeding your application's database.
|
*/
$factory->define(App\Models\User::class, function (Faker $faker) {
$date_time=$faker->date().' '.$faker->time();
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => str_random(10),
'created_at'=>$date_time,
'updated_at'=>$date_time
];
});
define第一个参数表示要填充的模型类,第二个参数是一个闭包函数,该函数引入类PHP函数库faker的实例
faker文档https://github.com/fzaninotto/Faker#formatters
3、生成填充文件
php artisan make:seeder UserTableSeeder
4、编写填充文件
<?php
use Illuminate\Database\Seeder;
use App\Models\User;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$user=factory(User::class)->times(50)->make();
User::insert($user->makeVisible(['password','remember_token'])->toArray());
}
}
times()方法指定生成填充数据的数量
make()方法创建用户实例,但是不写入数据库
create()方法与make()方法一样,但是create创建完用户实例后会写入数据库,而且是一条一条的写入,当运行填充文件且数据量大的时候,会非常耗时,因而不推荐使用
推荐先用make生成用户实例,然后将用户实例转成数组,然后一次性插入整个数组
makeVisible()是使用户模型中$hidden指定的隐藏字段临时显示
5、调用数据填充文件
在database/seeds/DatabaseSeeder中调用用户填充文件
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(UsersTableSeeder::class);
}
}
6、重置数据库并填充假数据
php artisan migrate:refresh
php artisan db:seed
如果想单独指定某个数据库填充文件
php artisan migrate:refresh
php artisan db:seed --class=UsersTableSeeder
也可以一条命令来指定重置和填充
php artisan migrate:refresh --seed