假数据填充步骤:
// 使用 factory 来创建一个 Faker\Generator 实例
$faker = Faker\Factory::create();
// 生成用户名
$faker->name; // "Janie Roob"
// 生成安全邮箱
$faker->safeEmail; // "claire.wuckert@example.net"
// 生成随机日期
$faker->date // "2011-02-10"
// 生成随机时间
$faker->time // "13:03:55"
1. 创建模型工厂文件
php artisan make:factory UserFactory
文件路径为(如果没有文件,自己则需要手动创建)
database/factories/UserFactory.php
//例子代码如下
<?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.
|
*/
/* define 定义了一个指定数据模型(如此例子
User)的模型工厂。define 方法接收两个参数,第一个参数为指定的
Eloquent 模型类,第二个参数为一个闭包函数,该闭包函数接收一个
Faker PHP 函数库的实例,让我们可以在函数内部使用 Faker
方法来生成假数据并为模型的指定字段赋值。 */
$factory->define(App\Models\User::class, function (Faker $faker) {
$date_time = $faker->date . ' ' . $faker->time;
static $password;
return [
'name' => $faker->name,
'email' => $faker->safeEmail,
'password' => $password ?: $password = bcrypt('secret'),
'remember_token' => str_random(10),
'created_at' => $date_time,
'updated_at' => $date_time,
];
});
2. 生成UsersTableSeeder
文件,用于填充用户相关的数据
php artisan make:seeder UsersTableSeeder
现在让我们使用该方法来创建 50 个假用户。
database/seeds/UsersTableSeeder.php
<?php
use Illuminate\Database\Seeder;
use App\Models\User;
class UsersTableSeeder extends Seeder
{
/* times 和 make 方法是由 FactoryBuilder 类 提供的 API。times
接受一个参数用于指定要创建的模型数量,make
方法调用后将为模型创建一个 集合。makeVisible 方法临时显示
User 模型里指定的隐藏属性 $hidden,接着我们使用了 insert
方法来将生成假用户列表数据批量插入到数据库中。最后我们还对
第一位用户的信息进行了更新,方便后面我们使用此账号登录。
*/
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$users = factory(User::class)->times(50)->make();
User::insert($users->makeVisible(['password', 'remember_token'])->toArray());
$user = User::find(1);
$user->name = 'Aufree';
$user->email = 'aufree@yousails.com';
$user->password = bcrypt('password');
$user->save();
}
}
3. 接着我们还需要在 DatabaseSeeder 中调用 call 方法来指定我们要运行假数据填充的文件
文件路径为
database/seeds/DatabaseSeeder.php
<?php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Model::unguard();
$this->call(UsersTableSeeder::class);
Model::reguard();
}
}
4. 命令执行
完成上面操作之后,我们便可以开始为用户生成批量假数据了,在运行生成假数据的命令之前,我们需要使用 migrate:refresh 命令来重置数据库,之后再使用 db:seed 执行数据填充。
# 方法01
php artisan migrate:refresh
php artisan db:seed
如果我们要单独指定执行 UserTableSeeder 数据库填充文件,则可以这么做:
# 方法02
php artisan migrate:refresh
php artisan db:seed --class=UsersTableSeeder
你也可以使用下面一条命令来同时完成数据库的重置和填充操作:
# 方法03
php artisan migrate:refresh --seed
网友评论