Laravle 通过填充器快速填充测试数据

Posted bigcola

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravle 通过填充器快速填充测试数据相关的知识,希望对你有一定的参考价值。

创建填充器

php artisan make:seeder UsersTableSeeder  //为users表创建填充器类

database/seeds目录下创建一个UsersTableSeeder填充器类

<?php

use IlluminateDatabaseSeeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        
    }
}

编写填充逻辑

 public function run()
    {
        IlluminateSupportFacadesDB::table(‘users‘)->insert([
            ‘name‘ => str_random(10),
            ‘email‘ => str_random(6).‘@qq.com‘,
            ‘password‘ => bcrypt(‘123456‘)
        ]);
    }

运行填充类进行数据填充

运行单个填充类填充

php artisan db:seed --class=UsersTableSeeder

技术图片

命令执行成功查看数据库也插入成功

技术图片

多个填充类填充

编辑应用根目录下的database/seeds/DatabaseSeeder.php文件

<?php

use IlluminateDatabaseSeeder;
use IlluminateDatabaseEloquentModel;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application‘s database.
     *
     * @return void
     */
    public function run()
    {
        //关闭安全保护
        Model::unguard();
        $this->call(PostsTableSeeder::class);
        $this->call(UsersTableSeeder::class);
    }
}
 

把需要执行的填充类添加到run方法中

php artisan db:seed

技术图片

通过模型工厂填充数据

创建模型工厂

模型工厂位于 database/factories目录下 Laravel 自带了一个用于填充 User 模型的模型工厂 UserFactory.php

<?php

use IlluminateSupportStr;
use FakerGenerator 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(AppUser::class, function (Faker $faker) {
    return [
        ‘name‘ => $faker->name,
        ‘email‘ => $faker->unique()->safeEmail,
        ‘email_verified_at‘ => now(),
        ‘password‘ => ‘$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm‘, // secret
        ‘remember_token‘ => Str::random(10),
    ];
});

通过$factory->define方法来定义是什么模型的模型工厂

调用模型工厂

UsersTableSeederrun方法中通过模型工厂改写数据填充方法:

    public function run()
    {
//        IlluminateSupportFacadesDB::table(‘users‘)->insert([
//            ‘name‘ => str_random(10),
//            ‘email‘ => str_random(6).‘@qq.com‘,
//            ‘password‘ => bcrypt(‘123456‘)
//        ]);
        factory(AppUser::class,5)->create();
    }

由于我们在 UserFactory.php 中全局定义了 User 模型的模型工厂,所以在这里只需调用 factory 方法,传入对应模型类和要填充的记录数即可,最后再调用 create 方法让变更生效。

技术图片

以上是关于Laravle 通过填充器快速填充测试数据的主要内容,如果未能解决你的问题,请参考以下文章

在哪里以及如何使用片段填充我的标签

用 JavaScript 中的 JSON 数据动态填充表格的快速方法

GLSL-片段着色器不同部分的精度不同

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

在用户控件中填充 ComboBox

Perl CGI 日期和时间选择器,自动填充当前日期和时间