1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

複数のfactoryを使い分けたいとき

Posted at

通常の記述であれば、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件できることになる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?