Как создать модель фабрики с внешним ключом laravel - PullRequest
0 голосов
/ 28 января 2019

У меня есть фабрика моделей:

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())

Все, что мне нужно, чтобы получить sbj_type в соответствии с subject_id

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Я решил свою проблему, я использовал:

$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

0 голосов
/ 28 января 2019

Используйте inRandomOrder построителя запросов в сочетании с методом value, чтобы получить случайный идентификатор непосредственно из базы данных:

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'),
    ];
});
...