Как связать данные с другой фабрики? - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть 2 модели, которые будут связаны. Называется Menu и Page. Соотношение между ними выглядит примерно так:

Каждый Menu имеет по одному Page

Каждый Page принадлежит Menu

Я создал сеялку, которая выглядит следующим образом:

<?php

use App\App;
use App\Component;
use App\Menu;
use App\Page;
use App\User;
use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $tester = new User();
        $tester->name = "Tester";
        $tester->email = "test@appbuilder.com";
        $tester->password = bcrypt('password');
        $tester->save();

        // Create 5 apps for each user
        $tester->apps()->saveMany(factory(App::class, 5)->make())->each(function ($app) {

            // Create 5 menus for each app
            $app->menus()->saveMany(factory(Menu::class, 5)->make());

            // Create 5 pages for each app
            $app->pages()->saveMany(factory(Page::class, 5)->make())->each(function ($page) {
                $page->components()->saveMany(factory(Component::class, 5)->make()); // Create 5 components for each page
            });
        });
    }
}

Я хочу связать каждую страницу, созданную ее фабрикой, с меню. Примерно так:

$menu->associate($page);

Возможно ли это? Как я могу этого достичь? Заранее спасибо.

1 Ответ

1 голос
/ 07 ноября 2019

Если вы вычтите логику создания и создадите их аналогично этому, это должно быть возможно. Вы должны сделать это после последнего сохранения многих, так как модель не была создана до этого.

$menus = factory(Menu::class, 5)->make();

$pages = factory(Page::class, 5)->make();

...

$menus->each(function ($menu) use ($pages) {
    $pages->each(function ($page)  use ($menu) {
        $page->associate($menu);
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...