Laravle 通过填充器快速填充测试数据
创建填充器
php artisan make:seeder UsersTableSeeder //为users表创建填充器类
在 database/seeds
目录下创建一个UsersTableSeeder
填充器类
<?php
use Illuminate\Database\Seeder;
class UsersTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
}
}
编写填充逻辑
public function run()
{
\Illuminate\Support\Facades\DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(6).'@qq.com',
'password' => bcrypt('123456')
]);
}
运行填充类进行数据填充
运行单个填充类填充
php artisan db:seed --class=UsersTableSeeder
命令执行成功查看数据库也插入成功
多个填充类填充
编辑应用根目录下的database/seeds/DatabaseSeeder.php
文件
<?php
use Illuminate\Database\Seeder;
use \Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
//关闭安全保护
Model::unguard();
$this->call(PostsTableSeeder::class);
$this->call(UsersTableSeeder::class);
}
}
把需要执行的填充类添加到run
方法中
php artisan db:seed
通过模型工厂填充数据
创建模型工厂
模型工厂位于 database/factories
目录下 Laravel 自带了一个用于填充 User
模型的模型工厂 UserFactory.php
:
<?php
use Illuminate\Support\Str;
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\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => Str::random(10),
];
});
通过$factory->define
方法来定义是什么模型的模型工厂
调用模型工厂
在UsersTableSeeder
的run
方法中通过模型工厂改写数据填充方法:
public function run()
{
// \Illuminate\Support\Facades\DB::table('users')->insert([
// 'name' => str_random(10),
// 'email' => str_random(6).'@qq.com',
// 'password' => bcrypt('123456')
// ]);
factory(\App\User::class,5)->create();
}
由于我们在 UserFactory.php
中全局定义了 User
模型的模型工厂,所以在这里只需调用 factory
方法,传入对应模型类和要填充的记录数即可,最后再调用 create
方法让变更生效。