我有一个模型工厂,如下:
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
相关的字段,。例如< / strong>,我有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())
我需要根据sbj_type
来获取subject_id
答案 0 :(得分:0)
使用查询生成器的inRandomOrder
和value
方法配对,直接从数据库中获取随机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'),
];
});
答案 1 :(得分:0)
我已经解决了我的问题,
$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