laravel 数据库填充

2018-08-28  本文已影响33人  _不能说的秘密i

larave version: 5.5.*

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

数据库填充器

创建数据库填充文件

php artisan make:seeder 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
    ];
});

使用模型工厂填充数据

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

上一篇下一篇

猜你喜欢

热点阅读