Вы можете достичь своей функциональности, используя состояния сеялки, как показано здесь.
$factory->define(Category::class, function (Faker $faker) {
return [
'name' => $faker->name,
'parent_id' => Category::inRandomOrder()->take(1)->first()->id,
];
});
$factory->state(Category::class, 'withParent', function (Faker\Generator $faker){
return [
'parent_id' => Category::inRandomOrder()->take(1)->first()->id,
];
});
Оптимизирована категория случайных, чтобы не получать все каждый раз. Не уверен на 100%, что это правильная процедура вызова, но вы должны понять.
Когда вы вызываете родителя, синтаксис:
factory(Category::class, 5)->create();
Если вам нужны категории с родителями, вы можете указать штат и добавить его в список.
factory(Category::class, 5)->states('withParent')->create();