Хобрук: Ваш путь к мастерству в программировании

Связь Model Factory с существующими моделями

В моем приложении Laravel 5.2 есть следующая структура:

Пользователь: id имя ...

Сообщение: id title body user_id (fk)

Комментарий: id body user_id (fk) post_id (fk)

Я хочу создать несколько пользователей (20), для каждого пользователя - случайное количество сообщений, а к каждому сообщению - случайное количество комментариев (даже фиксированное количество, это нормально).

Я могу создавать пользователей и назначать сообщения каждому, но я не могу назначать комментарии к каждому сообщению: у меня есть это:

factory(App\User::class, 20)->create()->each(function($u) {
   $u->posts()->saveMany(factory(App\Post::class, 5)->make();
});

Я кое-что нашел, но не работает:

factory(App\Comment::class, 100)->create()->each(function($u) {
   $u->user()->sync(
      App\User::all()->random(3)
   );
});

ПРИМЕЧАНИЕ: я установил отношения между моделями следующим образом: у пользователя есть много сообщений, у пользователя есть много комментариев, у сообщения есть много комментариев, комментарий принадлежит к сообщению, комментарий принадлежит пользователю.

23.01.2016

Ответы:


1

Вы можете добиться этого, используя свои фабрики, чтобы поселить вашего следующего ребенка и т. Д.

У вас есть отношения, на которые ссылаются некоторые fk, поэтому для достижения правильных значений 'fk' вы можете сделать следующее:

factory('App\Users', 123)->create()->each(function ($u) {

        factory('App\Posts', 1)->create([
            'user_id' => $u->id,
        ])->each(function ($e) use ($u) {
            factory('App\Comments', 10)->create([
                'user_id' => $u->id,
                'post_id' => $e->id,
            ]);
        });

    });

Массивы в методе create переопределят значения, установленные в вашем ModelFactory.php

23.01.2016
  • [ErrorException] Неопределенное свойство: Illuminate \ Database \ Eloquent \ Builder :: $ orders 23.01.2016
  • Я перешел на App \ User :: class, и ошибка исчезла. :)) Спасибо 24.01.2016
  • Рад, что смог помочь! :) 24.01.2016
  • Что ж, это создает пару комментариев от одного и того же пользователя в его собственных сообщениях. Но я думаю, это нормально для общего тестирования, чтобы просто заполнить базу данных данными. 08.09.2017
  • Новые материалы

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..

    Быстрая разработка: волшебный мир больших языковых моделей
    РУКОВОДСТВО Быстрая разработка: волшебный мир больших языковых моделей Подход, основанный на данных, для получения наилучшего ответа Искусство и наука Можно ли совместить машинное..