Laravel 测试数据批量写入

2024-02-01  本文已影响0人  左诗右码

假数据填充步骤:


// 使用 factory 来创建一个 Faker\Generator 实例
$faker = Faker\Factory::create();

// 生成用户名
$faker->name; // "Janie Roob"

// 生成安全邮箱
$faker->safeEmail; // "claire.wuckert@example.net"

// 生成随机日期
$faker->date // "2011-02-10"

// 生成随机时间
$faker->time // "13:03:55"

1. 创建模型工厂文件

php artisan make:factory UserFactory

文件路径为(如果没有文件,自己则需要手动创建)
database/factories/UserFactory.php


//例子代码如下
<?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.
|
*/

/* define 定义了一个指定数据模型(如此例子
User)的模型工厂。define 方法接收两个参数,第一个参数为指定的
Eloquent 模型类,第二个参数为一个闭包函数,该闭包函数接收一个
Faker PHP 函数库的实例,让我们可以在函数内部使用 Faker
方法来生成假数据并为模型的指定字段赋值。 */

$factory->define(App\Models\User::class, function (Faker $faker) {
    $date_time = $faker->date . ' ' . $faker->time;
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
        'created_at' => $date_time,
        'updated_at' => $date_time,
    ];
});

2. 生成UsersTableSeeder文件,用于填充用户相关的数据

php artisan make:seeder UsersTableSeeder

现在让我们使用该方法来创建 50 个假用户。

database/seeds/UsersTableSeeder.php


<?php

use Illuminate\Database\Seeder;
use App\Models\User;

class UsersTableSeeder extends Seeder
{

    /* times 和 make 方法是由 FactoryBuilder 类 提供的 API。times
    接受一个参数用于指定要创建的模型数量,make
    方法调用后将为模型创建一个 集合。makeVisible 方法临时显示
    User 模型里指定的隐藏属性 $hidden,接着我们使用了 insert
    方法来将生成假用户列表数据批量插入到数据库中。最后我们还对
    第一位用户的信息进行了更新,方便后面我们使用此账号登录。
    */

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $users = factory(User::class)->times(50)->make();
        User::insert($users->makeVisible(['password', 'remember_token'])->toArray());

        $user = User::find(1);
        $user->name = 'Aufree';
        $user->email = 'aufree@yousails.com';
        $user->password = bcrypt('password');
        $user->save();
    }
}

3. 接着我们还需要在 DatabaseSeeder 中调用 call 方法来指定我们要运行假数据填充的文件

文件路径为
database/seeds/DatabaseSeeder.php


<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Model::unguard();

        $this->call(UsersTableSeeder::class);

        Model::reguard();
    }
}

4. 命令执行

完成上面操作之后,我们便可以开始为用户生成批量假数据了,在运行生成假数据的命令之前,我们需要使用 migrate:refresh 命令来重置数据库,之后再使用 db:seed 执行数据填充。

# 方法01
php artisan migrate:refresh
php artisan db:seed

如果我们要单独指定执行 UserTableSeeder 数据库填充文件,则可以这么做:

# 方法02
php artisan migrate:refresh
php artisan db:seed --class=UsersTableSeeder

你也可以使用下面一条命令来同时完成数据库的重置和填充操作:

# 方法03
php artisan migrate:refresh --seed
上一篇 下一篇

猜你喜欢

热点阅读