模型工厂与现有模型的关联
Posted
技术标签:
【中文标题】模型工厂与现有模型的关联【英文标题】:Model Factory association with existing models 【发布时间】:2016-04-30 02:09:45 【问题描述】:我的 Laravel 5.2 应用程序具有以下结构:
用户: ID 姓名 ...
帖子: ID 标题 身体 user_id (fk)
评论: ID 身体 user_id (fk) post_id (fk)
我想创建几个用户 (20),为每个用户创建一个随机数量的帖子,并为每个帖子创建一个随机数量的 cmets(即使是固定数量也可以)。
我可以创建用户并将帖子分配给每个用户,但我不能将 cmets 分配给每个帖子: 我有这个:
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)
);
);
注意:我在模型之间建立了这样的关系: 用户有很多帖子, 用户有很多评论, 帖子有很多评论, 评论属于帖子, 评论属于用户
【问题讨论】:
【参考方案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
中设置的值
【讨论】:
[ErrorException] 未定义属性:Illuminate\Database\Eloquent\Builder::$orders 我更改为 App\User::class 并且错误消失了。 :)) 谢谢你 很高兴我能帮上忙! :) 嗯,这会在他自己的帖子中创建来自同一用户的几个 cmets。但我想它可以用于通用测试,只需用数据填充数据库。以上是关于模型工厂与现有模型的关联的主要内容,如果未能解决你的问题,请参考以下文章