3分钟短文:看傻眼!Laravel给数据库造假竟成工具链
引言上一章我们了解了使用laravel迁移功能创建数据库表 , 把DBA的工作挪到开发端 , 这样把岗位都省出来了 。但是只有光秃秃的数据库表 , 有个壳子没有数据确实没啥用 。 本文为大家讲讲laravel怎么给数据库造假数据 , 堂而皇之地假装生产 。
文章插图
本文使用的构建方式都是写脏数据 , 乱数据 , 无实质意义的数据 , 只对应用程序和数据库有用 , 别的嘛用没有!
代码时间就好比说种地要有种子 , 有了种子就可以长出庄稼和粮食;子子孙孙无穷尽也 。数据库也一样 , 数据库表就好比是地 , 种地我们得有种子 , 才能在命令行这样使用:
php artisan migrate --seed
或者让数据库一切从头开始 , 旧的数据清空 , 然后填充:
php artisan migrate:fresh --seed
这是针对所有的迁移和所有的种子文件而言的 , 如单独指定种子文件 , 可以这样做:
php artisan db:seedphp artisan db:seed --class=VotesTableSeeder
上一章我们算是把地给准备好了 , 下面就开始准备一袋种子 , 使用命令行脚手架指令:
php artisan make:seeder ContactsTableSeeder
上述指令会生成文件 ** database/seeds/ContactsTableSeeder.php** 。
为了把种子文件引入使用 , 在 database/seeds/DatabaseSeeder.php 文件内添加如下代码:
public function run(){$this->call(ContactsTableSeeder::class);}
然后手动实现 ContactsTableSeeder 类的 run() 方法:
use Illuminate\Database\Seeder;use Illuminate\Database\Eloquent\Model;class ContactsTableSeeder extends Seeder{public function run(){DB::table('contacts')->insert(['name' => 'Tom Hanks''email' => 'tomhanks@gmail.com',]);}}
看到这儿大家应该熟悉了吧 , 原生的数据库CRUD操作 , 直接指定表名 , 并 insert 插入一条新的数据 。 就这么简单 , 就这么一个动作 。但是 , 上面的方式 , 只能创建一条数据 , 我们要造假 , 怎么也得大规模造假 , 大规模的数据吧 。
模型工厂说一个高深玄乎的概念吧 , 听上去高大上 , 其实用法超简单 。
模型工厂!
这个是啥 , 就是生产模型的工厂 。 模型好比一个模具 , 有了模具 , 在工厂里可以加工出来数以千计数以万计的产品 。模型工厂就是这么个用法 。
还是使用命令行脚手架创建:
php artisan make:factory ContactFactory --model=Contact
上述指令会在 database/factories 目录下创建一个php文件 ContactFactory.php , 我们指定是给 contacts 表 对应的 Contact 模型文件生产数据的 。
在文件内添加如下代码:
use APP\Contact;use Faker\Generator as Faker;$factory->define(Contact::class, function (Faker\Generator $faker) {return ['name' => $faker->name,'email' => $faker->email,];});
这个文件为啥长这样?为什么这么写?类不类 , 方法不方法 , 函数不函数的!没错 , 就是一个代码片段 , laravel约定的东西 ,你这么写 , 在执行数据填充和测试的时候 , 它就起作用!就这么神奇 。
那如何控制填充条数呢?只要在需要填充数据的地方调用工厂类即可:
$contact = factory(Contact::class)->create();
这是一条数据 , 可以指定创建 500 条:
【3分钟短文:看傻眼!Laravel给数据库造假竟成工具链】factory(Contact::class, 500)->create();
怎么理解呢 , 就是我们创建了模型工厂类 ContactFactory , 然后使用 factory 快捷函数进行实例化调用 , 并使用工厂类内的数据 ,对每个模型发起N次指定方法的调用 。
OK , 模型工厂有很多奇思妙想的玩法 , 对于本文就简单说到这儿吧 。
写在最后本文介绍了使用laravel的Seeder进行数据填充 , 为了高效填充 , 我们介绍了工厂模式 , 这个高级玩意儿 , 确实用法有点偏 , 本不在五行八卦之列 。 希望大家用的开心 。
Happy coding :-)
我是@程序员小助手 , 专注编程知识 , 圈子动态的IT领域原创作者
- 看不上|为什么还有用户看不上华为Mate40系列来看看内行人怎么说
- 看过明年的iPhone之后,现在下手的都哭了
- 减重|快看!奇瑞蚂蚁都减重了 那你还焦虑什么?
- 敢动|女生最害怕被“偷看”的3软件,QQ不算啥,第二敢动就“翻脸”
- 关华为P50Pro|华为P50Pro概念图:半圆形6摄,看完iPhone12劝你暂时别买
- 社区|美团Q3财报看点:血拼社区团购新业务 投资大赚58个亿
- Vlog|中国Vlog|中国基建如何升级?看5G+智慧工地
- 涡轮|看法米特涡轮流量计如何让你得心应手
- 一图看懂!数字日照、新型智慧城市这样建(上篇)|政策解读 | 新型
- 和谐|人民日报海外版今日聚焦云南西双版纳 看科技如何助力人象和谐