网站PHP框架之Laravel5.5(十三)Factory工厂伪造数据

14 篇文章 0 订阅

步骤

设置Factories的生成字段

创建伪造数据

网站PHP框架之Laravel系列文章



设置Factories的生成字段

接着网站PHP框架之Laravel5.5(十二)使用Seeder方式向数据库填充数据的项目进行进一步的开发,我们在此项目中的users表中添加了身份字段role,Laravel默认给了我们一个UserFactory:/database/factories/UserFactory.php

<?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\User::class, function (Faker $faker) {
    static $password;

    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail,
        'password' => $password ?: $password = bcrypt('secret'),
        'remember_token' => str_random(10),
    ];
});

调用了工厂($factory)的定义函数(define),定义了一个User类传入了一个可以伪造数据的$faker实例,在具体的函数中定义了表里面的字段:

  • name
  • email
  • password
  • remember_token

添加role字段数据生成器:

<?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\User::class, function (Faker $faker) {
    static $password;

    return [
        'name' => $faker->name,

        'email' => $faker->unique()->safeEmail,
        //邮箱是唯一性的所以调用unique方法下的safeEmail

        'password' => $password ?: $password = bcrypt('secret'),

        'remember_token' => str_random(10),

        'role' => array_random(['admin','member','guest'])
        //定义了三个身份随机
    ];
});

 

创建伪造数据

调用Laravel项目提供好的工具tinker容器

php artisan tinker

Psy Shell v0.9.9 (PHP 7.3.6 — cli) by Justin Hileman    //进入到Psy Shell

指定命名空间App后获取当前所有用户(为了表示Pay Shell的IDE环境,在每行代码前添加了>>>,后面才是输入的代码)

>>> namespace App;
>>> $users = User::all();

返回了一个Collection(数据集合)的数据:

=> Illuminate\Database\Eloquent\Collection {#2902
     all: [
       App\User {#2903
         id: 1,
         name: "admin",
         role: "admin",
         email: "admin@gamacode.com",
         created_at: null,
         updated_at: null,
       },
     ],
   }

调用factory指定类和待造的数据条数进行create创建:

>>> factory(User::class,300)->create()

返回了一系列类似这样的数据:

App\User {#3225
         name: "Dolly Kling",
         email: "raphael86@example.org",
         role: "member",
         updated_at: "2019-07-12 19:59:48",
         created_at: "2019-07-12 19:59:48",
         id: 301,
       },

查看数据库管理软件查看users表:

伪造数据成功!

补充一点,用完Psy shell记得退出:

>>> exit;

注意:

  1. 已经进入了Tinker之后再改动的XxxFactory.php的生产数据设定,在当前Psy Shell中是不会生效的,需要退出Shell之后重新进入Tinker
  2. 进入Tinker后做的第一件事是指定命名空间App

 

 

网站PHP框架之Laravel系列文章

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值