Adding Relations to Laravel Factory Model(向 Laravel 工厂模型添加关系)
问题描述
我正在尝试添加与工厂模型的关系以进行一些数据库播种,如下所示 - 请注意,我正在尝试向每个用户添加 2 个帖子
I'm trying to add a relation to a factory model to do some database seeding as follows - note I'm trying to add 2 posts to each user
public function run()
{
   factory(AppUser::class, 50)->create()->each(function($u) {
         $u->posts()->save(factory(AppPost::class, 2)->make());
   });
}
但它抛出以下错误
Argument 1 passed to IlluminateDatabaseEloquentRelationsHasOneOrMany::s  
ave() must be an instance of IlluminateDatabaseEloquentModel, instance 
of IlluminateDatabaseEloquentCollection given
我认为这与保存集合有关.如果通过分别调用帖子的每个工厂模型来重新编写代码,它似乎可以工作.显然这不是很优雅,因为如果我想保留 10 个或发布给每个用户,那么我必须声明 10 或行,除非我使用某种 for 循环.
I think its something to do with saving a collection. If re-write the code by calling each factory model for the post separately it seems to work. Obviously this isn't very elegant because if I want to persist 10 or post to each user then I'm having to decalare 10 or lines unless I use some kind of for loop.
public function run()
{
   factory(AppUser::class, 50)->create()->each(function($u) {
     $u->posts()->save(factory(AppPost::class)->make());
     $u->posts()->save(factory(AppPost::class)->make());
   });
}
* 更新 *
有没有办法把模型工厂嵌套到第三层深?
Is there any way to nest the model factory a 3rd level deep?
public function run()
{
   factory(AppUser::class, 50)
       ->create()
       ->each(function($u) {
           $u->posts()->saveMany(factory(AppPost::class, 2)
                    ->make()
                    ->each(function($p){
                          $p->comments()->save(factory(AppComment::class)->make());
          }));
   });
}
推荐答案
从 Laravel 5.6 开始就有回调函数 afterCreating &afterMaking 允许您在创建/制作后直接添加关系:
Since Laravel 5.6 there is a callback functions afterCreating & afterMaking allowing you to add relations directly after creation/make:
$factory->afterCreating(AppUser::class, function ($user, $faker) {
    $user->saveMany(factory(AppPost::class, 10)->make());
});
$factory->afterMaking(AppPost::class, function ($post, $faker) {
    $post->save(factory(AppComment::class)->make());
});
现在
factory(AppUser::class, 50)->create()
会给你 50 个用户,每个用户有 10 个帖子,每个帖子有一个评论.
will give you 50 users with each having 10 posts and each post has one comment.
这篇关于向 Laravel 工厂模型添加关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:向 Laravel 工厂模型添加关系
				
        
 
            
        基础教程推荐
- php 7.4 在写入变量中的 Twig 问题 2022-01-01
 - 使用 scandir() 在目录中查找文件夹 (PHP) 2022-01-01
 - php中的PDF导出 2022-01-01
 - 将变量从树枝传递给 js 2022-01-01
 - PHPUnit 的 Selenium 2 文档到底在哪里? 2022-01-01
 - Web 服务器如何处理请求? 2021-01-01
 - Yii2 - 在运行时设置邮件传输参数 2022-01-01
 - 如何在数学上评估像“2-1"这样的字符串?产生“1"? 2022-01-01
 - 主题化 Drupal 7 的 Ubercart “/cart"页 2021-01-01
 - php中的foreach复选框POST 2021-01-01
 
    	
    	
    	
    	
    	
    	
    	
    	
				
				
				
				