在 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: "[email protected]",
is_admin: 1,
},
App\User {#694
name: "Arden Macejkovic",
email: "[email protected]",
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: "[email protected]",
is_member: 1,
},
App\User {#703
name: "Mr. Dario Jerde",
email: "[email protected]",
is_member: 1,
},
],
}