最近在使用Laravel开发项目,测试时 遇到了需要对数据库填大量假数据问题,由于是边学边做,所以也是各种百度,看博客,在这里自己总结一下。
factory 介绍什么的就不多做赘述了(传送门),我的个人理解就是生成一个模型实例的工具。
用法:先创建数据库模型,创建相应迁移文件,创建factory并绑定模型,创建seeder并通过使用factory生产N条数据再保存到数据库里。
php artisan make:model Demo --migration
php artisan make:factory DemoFactory --model=Demo
php artisan make:seeder DemossTableSeeder
这次在demos 的migration中添加一些简单的属性
然后添加Model的内容
$fillable属性是记录在create()方法中能被赋值的字段
$guarded属性与$fillable正好相反,用来记录在create()方法中不能被赋值的字段
两个属性在一个model类中只需要出现一个,就是非黑即白
$hidden属性记录可以隐藏字段,使这些属性不出现在返回的数组或者json格式中
$appends属性用来记录添加的本不再表中的属性,下面跟的getNameAttribute方法是用来定义被添加的属性的内容。底层会自动将这个方法和name属性绑定。这里添加一个name,用于下面factory的一个坑的演示
接下来继续添加Factory的内容,即return的数组
添加完成后再编写seeder,内容如下
可以看到再最后一句Demo::insert($demos->makeHidden(['name'])->toArray()) 中,使用了makeHidden方法将 name属性隐藏了起来,这是因为如果不隐藏,再执行php artisan db:seed 时会报错,提示name属性没有赋值导致填充失败,但是name属性是后期 添加上的,在数据库中并没有这个字段,刚开始我被卡在这个地方好一会。
最后,在DatebaseSeeder的run方法中添加上
$this->call(DemoTableSeeder::class);
然后执行php artisan db:seed,看到successfully就说明数据填充成功了。