【问题标题】: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)
   );
});

注意:我在模型之间建立了这样的关系: 用户有很多帖子, 用户有很多评论, 帖子有很多评论, 评论属于帖子, 评论属于用户

【问题讨论】:

    标签: php laravel model factory


    【解决方案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。但我想它可以用于通用测试,只需用数据填充数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多