美文网首页
laravel 数据库填充

laravel 数据库填充

作者: _不能说的秘密i | 来源:发表于2018-08-28 22:47 被阅读33次

    larave version: 5.5.*

    在开发中,总会碰到一些需要大量数据的例子,比如搜索....这时候就需要快速生成一些不重复且比较正常的数据,此时就可以使用laravel提供的数据库填充功能快速生成一些数据

    数据库填充器

    创建数据库填充文件

    php artisan make:seeder ArticlesTableSeeder
    
    • 创建好的文件放在 /database/seedes
    • 填充的文件名建议 数据表名TableSeeder 如 ArticlesTableSeeder

    修改刚刚创建的填充文件,填写需要填充的数据

    use Illuminate\Database\Seeder;
    
    class ArticlesTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            // 随机插入100条数据
            for ($i=0; $i<100; $i++) {
              DB::table("articles")->insert([
                'title' =>  str_random(10) ,         // 随机10字符串
                 'content' =>  str_random(50),   // 随机50字符串
              ]);
            }
            
        }
    }
    
    

    运行填充器

    php artisan db:seed
    

    模型工厂 (推荐)

    创建模型工厂

    php artisan make:factory  UserFactory
    

    修改模型工厂文件

    <?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.
    |
     */
    
    $factory->define(App\Users::class, function (Faker $faker) {
        // 随机取 3 年前到现在的时间
        $updatedAt = $faker->dateTimeBetween('-3 years');
        $createdAt = $faker->dateTimeBetween('-3 years', $updatedAt);
        return [
            'username' => $faker->name,
            'email' => $faker->unique()->safeEmail,
            'avatar' => 'https://upload.jianshu.io/users/upload_avatars/7942449/3fac886a-3003-4f8a-8772-181d14c8b68a.jpg?imageMogr2/auto-orient/strip|imageView2/1/w/120/h/120',
            'mobile' => $faker->phoneNumber,
             // decrypt password: 123456
            'password' => 'eyJpdiI6InNtcmxZTzk2b1FcL0hXdFhYcTBlT3lRPT0iLCJ2YWx1ZSI6ImoyRVhzSElBc0hsU1VqNHFFV2gyMmc9PSIsIm1hYyI6Ijg4Y2I3ZjMyOGFjMDk1Yjk0YWMwNjc4NjljNTc2ZjkxMTc1MDk1OTRiM2RkZjY0YzdiZjM0NGM2MDhhOGVkZTYifQ==',
            'created_at' => $createdAt,
            'updated_at' => $updatedAt
        ];
    });
    
    • 注意填充数据库时必填字段不能为空
    • 注意 created_atupdated_at 这两个字段, 如果不需要可以在模型中设置 $timestamps = false;

    使用模型工厂填充数据

    • 使用 tinker 命令行工具
    • 使用数据库填充器 (推荐)
    php artisan tinker
    factory(\App\Users::class, 100)->create();
    

    使用 tinker 这个命令后会出现一个新的命令行. 创建100条随机数据

    除了使用 tinker 这个命令行工具, 模型工厂也可以结合数据库填充器使用

    <?php
    
    use Illuminate\Database\Seeder;
    
    class UsersTableSeeder extends Seeder
    {
        /**
         * Run the database seeds.
         *
         * @return void
         */
        public function run()
        {
            factory(\App\Users::class)->times(100)->create();
        }
    }
    
    

    关于生成随机数据的语言配置

    由于默认生成的数据不是中文,如果需要生成中文的姓名,地区...
    找到 /config/app.php

    return [
        // ... 加入这一个配置factory语言的选项
       'faker_locale' => 'zh_CN',
    ]
    

    factory github

    https://github.com/fzaninotto/Faker

    参考

    https://wujunchao.com/blog/p/1157
    https://broqiang.com/posts/29

    相关文章

      网友评论

          本文标题:laravel 数据库填充

          本文链接:https://www.haomeiwen.com/subject/evecwftx.html