【问题标题】:Laravel 8 - Calling multiple factory states at onceLaravel 8 - 一次调用多个工厂状态
【发布时间】:2021-08-21 12:52:35
【问题描述】:

在 Laravel 8 之前,似乎可以选择一次排列不同的状态

$users = factory(App\User::class, 5)->states('premium', 'delinquent')->make(); (编辑:我现在意识到这是将 2 个不同的状态应用到同一个工厂记录中)

而我似乎在 Laravel 8 中找不到类似的东西,有人知道怎么做吗?

基本上我是在尝试调用一个链来创建具有不同状态的多个记录,例如:

User::factory()->verified()->unverified()->banned()->create()

结果:3 个不同的用户 1 个已验证 1 个未验证 1 个被禁止

可以用下面的代码实现,只是看起来有点冗长

User::factory()->verified()->create();       
User::factory()->unverified()->create();       
User::factory()->banned()->create(); 

【问题讨论】:

  • 如何既能被验证未被验证?
  • 现在我需要 User::factory()->verified()->create(); User::factory()->unverified()->create(); User::factory()->banned()->create(); 老实说,这确实有效,只是感觉不一定像 laravel 的方式,所以认为问一下会很好。 PS:用户未同时验证和未验证。根据结果​​,他们是 3 个不同的用户:

标签: laravel testing factory


【解决方案1】:

1。摆脱状态,只使用序列

User::factory()
->count(3)
->state(new Sequence(
    ['status' => 'verified'],
    ['status' => 'unverified'],
    ['status' => 'banned'],
))
->create()

2。使用变量作为函数

保留您当前的状态,但从预定义的列表中动态访问它们。

$states = ['verified', 'unverified', 'banned'];
foreach ($states as $state) {
    User::factory()->$state()->create();
}

3。亲手写出来。

类似于数字 2,但我们不使用循环。

User::factory()->verified()->create();
User::factory()->unverified()->create();
User::factory()->banned()->create();

【讨论】:

  • 谢谢,多么好的答案。我喜欢选项 1,因为我以前从未考虑过这一点,但在更复杂的情况下它仍然非常冗长。选项 2 - 在我看来,这可能是最优雅的方式,它正盯着我的脸,我不知道我怎么想不到这一点:)
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 2021-02-10
  • 2020-12-28
  • 2021-05-10
  • 2021-01-14
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多