1

Laravel 5.3 教程:https://www.codecasts.com/ser...

在 Laravel 5.3 (具体版本是在 5.3.17 之后可以使用)的时候,Factory 模块新增了一个非常好用的方法 state(),这对于我们处理一些不同角色的时候非常有用,具体可以看下面的例子:

正常的,我们还是使用 define 来定义 factory:


$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->unique()->safeEmail
    ];
});

然后比如我们中有 admin 和 member等。我们可以这样:

1.声明 admin 的 state:

$factory->state(App\User::class, 'admin', function (Faker\Generator $faker) {
    return [
        'is_admin' => 1
    ];
});

2.声明 member 的 state:

$factory->state(App\User::class,'member', function (Faker\Generator $faker) {
    return [
        'is_member' => 1
    ];
});

最后,我们就可以在 tinker 的 factory 中这样使用:

1.执行 admin 的 states:

factory(\App\User::class, 2)->states('admin')->make()

命令行输出结果:

=> Illuminate\Database\Eloquent\Collection {#704
     all: [
       App\User {#695
         name: "Vivian Renner",
         email: "zoila85@example.org",
         is_admin: 1,
       },
       App\User {#694
         name: "Arden Macejkovic",
         email: "dwunsch@example.org",
         is_admin: 1,
       },
     ],
   }

2.执行 member 的 state :

factory(\App\User::class, 2)->states('member')->make()

命令行输出:

=> Illuminate\Database\Eloquent\Collection {#708
     all: [
       App\User {#699
         name: "Perry Feil",
         email: "rhoda.reinger@example.org",
         is_member: 1,
       },
       App\User {#703
         name: "Mr. Dario Jerde",
         email: "josh.kiehn@example.net",
         is_member: 1,
       },
     ],
   }

JellyBool
16.2k 声望2k 粉丝

给学网 GeiXue.com 创始人:让每一个热爱编程的人都学有所成的精品课程。