我怎样才能以其中一些在 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',然后是一个随机单词。
我需要在 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',然后是一个随机单词。