В Laravel 8 как передать аргументы от seed к factory?

seed

public function run(){
    $name = ['John','Artur'];

    User::factory()->count(2)->create(['name' => $name]);
}

factory

protected $model = User::class;
   
public function definition(){
   return [
       'name' => $name, //тут нужно получить значение
       'email' => $this->faker->unique()->safeEmail(),
   ];
}

Ответы (1 шт):

Автор решения: Dmitrii Sedov

Делается это через Sequence и метод state или просто метод sequence. Читайте данный раздел документации. В вашей фабрике оставьте фейковое имя, если вдруг вы создадите не 2, а 10 пользователей, а входной массив будет состоять из двух значений, то 2 создадутся с вашими именами, а остальные с фейковыми

Примеры:

$names = [
    ['name' => 'John'],
    ['name' => 'Arthur']
];
\App\Models\User::factory()->count(2)
     ->sequence(...$names)
     ->create();

или

use Illuminate\Database\Eloquent\Factories\Sequence;

$names = [
    ['name' => 'John'],
    ['name' => 'Arthur']
];
\App\Models\User::factory()->count(2)
     ->state(new Sequence(...$names))
     ->create();
→ Ссылка