在实际的项目开发过程中,我们经常会用到一些假数据来对数据库进行填充以方便调试程序
假数据的生成分为两个阶段:
- 对要生成假数据的模型指定字段进行赋值 - 模型工厂;
- 批量生成假数据模型 - 数据填充;
1.建立模型工厂:
database/factories/UserFactory.php
use App\Models\User; use Illuminate\Support\Str; use Faker\Generator as Faker; $factory->define(User::class, function (Faker $faker) { $date_time = $faker->date . ' ' . $faker->time; return [ 'name' => $faker->name, 'email' => $faker->unique()->safeEmail, 'email_verified_at' => now(), 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret 'remember_token' => Str::random(10), 'created_at' => $date_time, 'updated_at' => $date_time, ]; });
2.数据填充
database/seeds/UsersTableSeeder.php
use Illuminate\Database\Seeder; use App\Models\User; class UsersTableSeeder extends Seeder { public function run() { $users = factory(User::class)->times(50)->make(); User::insert($users->makeVisible(['password', 'remember_token'])->toArray()); } }
times
和 make
方法是由 FactoryBuilder 类 提供的 API。times
接受一个参数用于指定要创建的模型数量,make
方法调用后将为模型创建一个 集合。makeVisible
方法临时显示 User 模型里指定的隐藏属性 $hidden
,接着使用User::insert
方法来将生成假用户列表数据批量插入到数据库中。
3.在DatabaseSeeder
中调用 call
方法来指定我们要运行假数据填充的文件
database/seeds/DatabaseSeeder.php
use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; class DatabaseSeeder extends Seeder { public function run() { Model::unguard(); $this->call(UsersTableSeeder::class); Model::reguard(); } }
4.重置数据库并进行数据填充
$ php artisan migrate:refresh $ php artisan db:seed
以上命令可合并为
$ php artisan migrate:refresh $ php artisan db:seed --class=UsersTableSeeder
php artisan migrate:refresh --seed
如果只针对UserTable填充,则单独指定执行 UserTableSeeder
数据库填充文件