如何关联来自其他工厂的数据? [英] How to associate data from a different factory?

查看:74
本文介绍了如何关联来自其他工厂的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有2个要关联的模型.它称为MenuPage.两者之间的关系是这样的:

I have 2 Models to be associated. It called Menu and Page. The relation between each is something like this:

每个Menu都有一个Page

每个Page都属于Menu

我创建了一个如下所示的播种机:

I have created a seeder that looks like this:

<?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
            });
        });
    }
}

我想将其工厂创建的每个页面与菜单相关联.像这样:

I want to associate each page created by its factory with the menus. Something like this:

$menu->associate($page);

有可能吗?我该如何实现?预先感谢.

Is it possible? How can I achieve that? Thanks in advance.

推荐答案

如果您减去创建逻辑并创建与此类似的逻辑,则应该可行.您必须在最后一次保存多次之后执行此操作,因为在此之前不会创建模型.

If you subtract the creation logic out and creates them similar to this it should be possible. You have to do it after the last save many, as the model is not created before that.

$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);
    });
});

这篇关于如何关联来自其他工厂的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆