#php #laravel #laravel-8 #laravel-seeding
#php #laravel #laravel-8 #laravel-заполнение
Вопрос:
Я использую Laravel 8 и PHP версии 7.4. У меня есть модель со схемой, сгенерированной с помощью приведенной ниже миграции.
CreateContestsTable
public function up()
{
Schema::create('contests', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->foreignId('contest_id')->nullable();
$table->foreign('contest_id')->references('id')->on('contests');
});
}
У A contest
может быть много contests
. Для этого я сгенерировал фабричный класс.
ContestFactory
public function definition()
{
return [
'name' => $this->faker->paragraph(),
];
}
ContestSeeder
public function run()
{
AppModelsContest::factory(10)->create([
'contest_id' => array_rand(AppModelsContest::all()->pluck('id')->toArray())
]);
}
Приведенное выше выдает следующую ошибку.
ErrorException array_rand(): массив пуст
Как я могу решить эту проблему?
Комментарии:
1. на тот момент они еще не были созданы … вы можете вызвать
create()->each(...)
итерацию по ним после того, как все они будут созданы2. Спасибо @lagbox, если бы это был ответ, я бы принял его.
create()->each(...)
это то, что мне было нужно
Ответ №1:
Записи еще не были созданы, когда вы выполняете запрос для извлечения информации. Вы можете вызывать create()
без аргументов, чтобы он создавал записи, после чего вы можете повторять возвращенную коллекцию:
AppModelsContest::factory(10)->create()->each(...);