zoukankan      html  css  js  c++  java
  • 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 数据库填充文件

  • 相关阅读:
    Android studio 快捷键记录
    Android开发 判断目标Fragment是否在前台
    Android开发 build.gradle的使用记录
    Android开发 在Application用于初始化的工具类
    Android开发 因为模块化导致findViewById返回为空null
    Android开发 本地广播
    Android开发 报错: xxx does not have a NavController set on xxx
    Android开发 GridLayout网格布局
    Android开发 Fragment启动Activity在使用onActivityResult的一些问题
    Html 创建自定义标签并且被jQuery获取到
  • 原文地址:https://www.cnblogs.com/itwatcher/p/12119152.html
Copyright © 2011-2022 走看看