laravel model factory覆盖默认状态

时间:2017-10-26 09:48:09

标签: php laravel factory

是否可以在不使用状态的情况下覆盖工厂的默认值?

我使用的工具可以从我的模型生成工厂,但我想修改一些属性。我知道我可以使用

$factory->state(\App\User::class, 'moderator', function ...

但是我想这样做而不依赖于在每个模型创建时指定状态。像

这样的东西
$factory->state(\App\User::class, 'default', function ...

1 个答案:

答案 0 :(得分:1)

您在工厂中定义的是默认行为,例如

$factory->define(App\User::class, function(Faker $faker) {
    return [
        ...
        'name' => 'Jon Snow',
        ...
    ];
});

您可以使用状态覆盖此默认行为,例如

$factory->state(App\User::class, 'bad-guy', function (Faker $faker) {
    return [
        'name' => 'Night King'
    ]
};

您可以执行的最后一次覆盖是您要创建该实例的时间,例如

$jonSnow = factory(App\User::class)->create();

$nightKing = factory(App\User::class)->states('bad-guy')->create(); 

$samTarly = factory(App\User::class)->create([
    'name' => 'Sam Tarly'
]);