Создайте сеялку базы данных с таким же случайным значением в строке таблицы с помощью Laravel сеялки базы данных - PullRequest
1 голос
/ 06 мая 2020

Я пытаюсь создать таблицу и заполнить ее следующими полями с помощью сеялки базы данных:

  • option a
  • option b
  • option c
  • option d
  • правильный вариант

Первым четырем полям будет присвоено случайное слово, а последнее поле «правильный вариант» будет содержать любое из первых четырех. Я не мог найти никакого решения, чтобы сделать это с помощью сеялки базы данных Laravel. Кто-нибудь может помочь?

Ответы [ 3 ]

2 голосов
/ 06 мая 2020

Что-то вроде этого?

использовать функцию случайного элемента faker на вашем заводе или сеялке.

$optionA = $faker->word;
$optionB = $faker->word;
$optionC = $faker->word;
$optionD = $faker->word;

return [
        'option_a' => $optionA,
        'option_b' => $optionB,
        'option_c' => $optionC,
        'option_d' => $optionD,
        'correct_option'   => $faker->randomElement([$optionA,$optionB,$optionC,$optionD]),
];
0 голосов
/ 06 мая 2020

Звучит как идеальный вариант использования JSON столбцов (как для вопросов, так и для ответов). Например, вы можете решить иметь несколько действительных ответов на один вопрос с множественным выбором.

В вашей миграции:

// create_questions_table.php
...
$table->json('choices')->default(new Expression('(JSON_ARRAY())'));
$table->json('answer')->default(new Expression('(JSON_ARRAY())'));

From https://laravel.com/docs/7.x/migrations#column -модификаторы :

Использование экземпляра Expression предотвратит заключение значения в кавычки и позволит вам использовать функции c, указанные в базе данных. Одна ситуация, когда это особенно полезно, - это когда вам нужно назначить значения по умолчанию для JSON столбцов.

Затем создайте фабрику:

// QuestionFactory.php
$factory->define(Location::class, function (Faker $faker) {
    $choices = $faker->words(4);
    $answer = [ $choices[rand(1,4)] ];

    return [
        'choices' => $choices,
        'answer' => $answer,
    ];
});

Используя библиотеку Faker, включенную в Laravel, мы можем выбрать 4 слова и случайным образом назначить одно из них ответом.

0 голосов
/ 06 мая 2020

Создайте фабрику и используйте Faker для генерации случайных слов, которые вам нужны

...