faker假数据php,3分钟短文:看傻眼!Laravel给数据库造假竟成工具链

引言

上一章我们了解了使用laravel迁移功能创建数据库表,把DBA的工作挪到开发端,这样把岗位都省出来了。但是只有光秃秃的数据库表,有个壳子没有数据确实没啥用。本文为大家讲讲laravel怎么给数据库造假数据,堂而皇之地假装生产。

c83d8c0b92327086d5142a9b545b3d2c.png

本文使用的构建方式都是写脏数据,乱数据,无实质意义的数据,只对应用程序和数据库有用,别的嘛用没有!

代码时间

就好比说种地要有种子,有了种子就可以长出庄稼和粮食;子子孙孙无穷尽也。数据库也一样,数据库表就好比是地,种地我们得有种子,才能在命令行这样使用:

php artisan migrate --seed

或者让数据库一切从头开始,旧的数据清空,然后填充:

php artisan migrate:fresh --seed

这是针对所有的迁移和所有的种子文件而言的,如单独指定种子文件,可以这样做:

php artisan db:seed

php 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 条:

factory(Contact::class, 500)->create();

怎么理解呢,就是我们创建了模型工厂类ContactFactory,然后使用factory快捷函数进行实例化调用,并使用工厂类内的数据,对每个模型发起N次指定方法的调用。

OK,模型工厂有很多奇思妙想的玩法,对于本文就简单说到这儿吧。

写在最后

本文介绍了使用laravel的Seeder进行数据填充,为了高效填充,我们介绍了工厂模式,这个高级玩意儿,确实用法有点偏,本不在五行八卦之列。希望大家用的开心。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值