Laravel—模型工厂

1、生成模型工厂

php artisan make:factory PostFactory

生成的模型工厂位于database/factories目录下

2、编写工厂

我们来看一下自带的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\Models\User::class, function (Faker $faker) {
    $date_time=$faker->date().' '.$faker->time();
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
        'remember_token' => str_random(10),
        'created_at'=>$date_time,
        'updated_at'=>$date_time
    ];
});

define第一个参数表示要填充的模型类,第二个参数是一个闭包函数,该函数引入类PHP函数库faker的实例

faker文档https://github.com/fzaninotto/Faker#formatters

3、生成填充文件

php artisan make:seeder UserTableSeeder

4、编写填充文件

<?php

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

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

times()方法指定生成填充数据的数量

make()方法创建用户实例,但是不写入数据库

create()方法与make()方法一样,但是create创建完用户实例后会写入数据库,而且是一条一条的写入,当运行填充文件且数据量大的时候,会非常耗时,因而不推荐使用

推荐先用make生成用户实例,然后将用户实例转成数组,然后一次性插入整个数组

makeVisible()是使用户模型中$hidden指定的隐藏字段临时显示

5、调用数据填充文件

在database/seeds/DatabaseSeeder中调用用户填充文件

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
         $this->call(UsersTableSeeder::class);
    }
}

6、重置数据库并填充假数据

php artisan migrate:refresh
php artisan db:seed

如果想单独指定某个数据库填充文件

php artisan migrate:refresh
php artisan db:seed --class=UsersTableSeeder

也可以一条命令来指定重置和填充

php artisan migrate:refresh --seed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值