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

创建填充器

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

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

<?php

use Illuminate\Database\Seeder;

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

编写填充逻辑

 public function run()
    {
        \Illuminate\Support\Facades\DB::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 Illuminate\Database\Seeder;
use \Illuminate\Database\Eloquent\Model;

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 Illuminate\Support\Str;
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\User::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()
    {
//        \Illuminate\Support\Facades\DB::table('users')->insert([
//            'name' => str_random(10),
//            'email' => str_random(6).'@qq.com',
//            'password' => bcrypt('123456')
//        ]);
        factory(\App\User::class,5)->create();
    }

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

posted @ 2020-07-24 17:46  _大可乐  阅读(184)  评论(0编辑  收藏  举报