laravel 数据库填充

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值