我怎样才能以其中一些在 laravel 中具有特定值的方式制作假记录?

How can I make fake records in a way that some of them have specific values in laravel?

我需要在 laravel 测试中制作一些假记录,其中一些具有特定值。

例如我需要创建 20 个国家名称的假记录,并希望将这两个记录命名为“USA”和“UK”,其他值并不重要。

如果我使用此代码,所有记录名称将相同:

$country = Country::factory()->count(20)->create(['name'=> 'USA']);

为什么只使用 2 行?

Country::factory()->count(10)->create(['name'=> 'USA']);
Country::factory()->count(10)->create();

或者你可以像这样放入你的工厂:

/**
 * Define the model's default state.
 *
 * @return array<string, mixed>
 */
public function definition()
{
    return [
        'name' => $this->faker->boolean ? $this->faker->randomElement(['USA', 'UK']) : null,

你可以这样做

$country = Country::factory()
    ->count(20)
    ->sequence(new Sequence(
        function($sequence) { 
            return $index === 0 ? 
            ['name' => 'UK'] : 
                $index === 1 ? 
                ['name' => 'USA'] : 
                ['name' => $this->faker->word()]; 
        }
    ))
    ->create();

这样,如果序列处于第一次迭代中,名称将设置为 'UK',第二次迭代将设置为 'USA',然后是一个随机单词。