Посев моделей с парой случайных, но связанных в разных моделях полей laravel

Есть сущности template, они распределены по сущностям category. У обеих сущностей есть поле type, которое случайно генерируется в фабриках. Но должно совпадать при случайном распределении шаблонов по категориям

Следующий код создает 10 категорий, сохраняет их id-шники в коллекцию и они рандомно назначаются шаблонам. Но вот беда. Их типы должны совпадать. Код ниже не учитывает этой особенности. И типы шаблонов и категорий не совпадают, что логично.

    Category::factory()->count(10)->create();
    $category_ids = Category::all()->pluck('id');

    Template::factory()->count(50)->create([
        'category_id' => function () use ($category_ids) {
            return $category_ids->random();
        }
        //Здесь должно быть еще поле 'type'
    ]);

Попробовал сделать такой вариант, но не сработало

    Category::factory()->count(10)->create();
    $category_ids = Category::all()->pluck('id');
    $random_id = 1;
    
    Template::factory()->count(50)->create([
        'category_id' => function () use ($category_ids, &$random_id) {
            $random_id = $category_ids->random();
            return $random_id;
        },
        'type' => function () use (&$random_id) {
            return Category::find($random_id)->type;
        },
    ]);

Если проверить по $ramdom_id (совпадет id совпадет и тип), то вначале выполняется код для элемента 'type' со значением начальной инициализации

type 1
cat 6
type 6
cat 4
type 4
cat 10
type 10
cat 8

Но если переметить фунцию random() к элементу 'type'

Category::factory()->count(10)->create();
    $category_ids = Category::all()->pluck('id');
    $random_id = 1;

    Template::factory()->count(50)->create([
        'type' => function () use ($category_ids, &$random_id) {
            $random_id = $category_ids->random();
            return Category::find($random_id)->type;
        },
        'category_id' => function () use (&$random_id) {
            return $random_id;
        },
    ]);

То все работает

type 9
cat 9
type 2
cat 2
type 12
cat 12
type 1
cat 1

У меня два вопроса.

  1. Этот массив обрабатывается в обратном алфавитном порядке или дело в 'category_id'?
  2. Это вообще нормальный способ решения или ерудна? Если ерунда, то тогда как по нормальному сделать?

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