В 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();