如何关联来自不同工厂的数据



我有两个要关联的模型。它称为MenuPage。两者之间的关系如下:

每个Menu都有一个Page

每个Page属于一个Menu

我创建了一个种子程序,看起来像这样:

<?php
use AppApp;
use AppComponent;
use AppMenu;
use AppPage;
use AppUser;
use IlluminateDatabaseSeeder;
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);

有可能吗?我怎样才能做到这一点?提前谢谢。

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

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

最新更新