通常の記述であれば、factoryを作成すると、そこを参照して、testデータや、seedデータが作成される。
例えば、
factoryが以下のような記述で、
User1Factory.php
$factory->define(AppUser::class, function (Faker $faker) {
return [
'name' => $faker->name,
];
});
seedデータは以下のようだとしたら、
Users1TableSeeder.php
public function run()
{
factory(User::class, 100)->create();
}
$fakerを作成使用したダミーデータが100件できることになる。
しかし、何らかの事情で,場面によって別のFactoryで作成したデータを使いたいときなどは、
そのまま記述してもUser1Factory.phpの内容が勝手に呼び出される。
そこで,「state」というものを使って名前をつけて、「このfactoryを使用したい時はこれ」と明示的に呼び出せるようにしてあげる。
*$factory->stateは別のところで、$factory->defineを定義していなければ使えないので注意してください。
Model2Factory.php
$factory->state(User::class, 'SampleName', function (Faker $faker) {
return [
'name' => 'samplename',
];
});
上記のように$factory->stateの第二引数で、名前を指定してやり、呼び出す際は
states('名前')
のような形で呼び出す。
Users2TableSeeder.php
public function run()
{
factory(User::class, 100)
->states('SampleName')
->create();
}
こうすることで、今度はsamplenameというデータが100件できることになる。