【问题标题】:How to create a model factory with foreign key laravel如何使用外键 laravel 创建模型工厂
【发布时间】:2019-06-21 16:23:48
【问题描述】:

我有一个模型工厂:

QuestionFactory.php:

$factory->define(App\Question::class, function (Faker $faker) {
    return [
        'question' => $faker->text($maxNbChars = 150),
        'subject_id' => $faker->randomElement(App\Subject::pluck('id')->toArray()),
        'sbj_type_id' => $faker->randomElement(App\SbjType::pluck('id')->toArray())
    ];
});

但上面的代码也在这里获取另一个主题类型sbj_type_id 链接到sbj_type 表,然后还有一个与sbj_type 相关的字段,.eg,我有2 个主题和 4 个子类型,所以我有 2 个类型链接到 1 个主题,其他 2 个与第二个主题相关,所以我也需要根据 subject_id 获取,我已经这样做了

'sbj_type_id' => $faker->randomElement(App\SbjType::where('subject_id', App\Subject::inRandomOrder()->value('id'))->pluck('id')->toArray())

我只需要根据subject_id获取sbj_type

【问题讨论】:

    标签: php laravel laravel-5 faker


    【解决方案1】:

    使用查询构建器的inRandomOrdervalue 方法配对,直接从数据库中获取随机ID:

    App\Subject::inRandomOrder()->value('id')
    

    要将它放入您的工厂,它看起来像这样:

    $factory->define(App\Question::class, function (Faker $faker) {
        return [
            'question' => $faker->text($maxNbChars = 150),
            'subject_id' => App\Subject::inRandomOrder()->value('id'),
            'sbj_type_id' => App\SbjType::inRandomOrder()->value('id'),
        ];
    });
    

    【讨论】:

      【解决方案2】:

      我已经解决了我的问题,我使用了:

      $subject = App\Subject::inRandomOrder()->value('id');
      return [
          'question' => $faker->text($maxNbChars = 150),
          'subject_id' => $subject,
          'sbj_type_id' => App\SbjType::where('subject_id', $subject)->inRandomOrder()->value('id'),
      ]
      

      首先,我从数据库中获取subject_id 并将其存储到变量$subject 中,然后在伪造代码中我在条件中使用了该变量,这样我就解决了我的问题,感谢@JosephSilber

      【讨论】:

        猜你喜欢
        • 2017-03-21
        • 2015-12-02
        • 1970-01-01
        • 2018-09-03
        • 2022-11-22
        • 2021-04-25
        • 1970-01-01
        • 2018-08-20
        • 2017-04-11
        相关资源
        最近更新 更多