laravel实践24.填充假数据

Posted GIC扫地僧

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel实践24.填充假数据相关的知识,希望对你有一定的参考价值。

在实际的项目开发过程中,我们经常会用到一些假数据来对数据库进行填充以方便调试程序

假数据的生成分为两个阶段:

  1. 对要生成假数据的模型指定字段进行赋值 - 模型工厂;
  2. 批量生成假数据模型 - 数据填充;

1.建立模型工厂:

database/factories/UserFactory.php

use AppModelsUser;
use IlluminateSupportStr;
use FakerGenerator 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‘ => ‘faked_password‘, // 可输入一条由bcrypt生成的固定字符串
        ‘remember_token‘ => Str::random(10),
        ‘created_at‘ => $date_time,
        ‘updated_at‘ => $date_time,
    ];
});

2.数据填充

database/seeds/UsersTableSeeder.php

use IlluminateDatabaseSeeder;
use AppModelsUser;

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 IlluminateDatabaseSeeder;
use IlluminateDatabaseEloquentModel;

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 数据库填充文件

 

以上是关于laravel实践24.填充假数据的主要内容,如果未能解决你的问题,请参考以下文章

FirebaseRecyclerAdaptor 不会填充 recyclerview

Laravel 策略最佳实践

Laravel 编码技巧一

如何根据laravel控制器中另一个表中保存的数据创建触发器以填充数据库中的表

Laravel Auth::attempt() 总是假的?

如何在片段中填充列表视图?