Сеялка Laravel назначает значение в столбце на основе существующих данных из базы данных - PullRequest
1 голос
/ 30 октября 2019

У меня есть таблица users с полем parent_id, и я хочу заполнить, но моя проблема в том, что я хочу, чтобы столбец parent_id имел значение, основанное на той же таблице users. Я хочу получить parent_id на основе role = 3 из моей таблицы users. Как мне этого добиться? Таблица пользователей и студентов одинакова. Это имеет значение только в столбце roles.

Структура таблицы

+-------------------+------------------+------+-----+---------+----------------+
| Field             | Type             | Null | Key | Default | Extra          |
+-------------------+------------------+------+-----+---------+----------------+
| id                | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| name              | varchar(191)     | NO   |     | NULL    |                |
| fname             | varchar(191)     | NO   |     |         |                |
| lname             | varchar(191)     | NO   |     |         |                |
| email             | varchar(191)     | NO   | UNI | NULL    |                |
| password          | varchar(191)     | NO   |     | NULL    |                |
| role              | int(11)          | NO   |     | 0       |                |
| school_id         | int(11)          | NO   |     | NULL    |                |
| student_school_id | varchar(191)     | YES  |     | NULL    |                |
| student_card_no   | varchar(191)     | YES  |     | NULL    |                |
| section_id        | int(11)          | YES  |     | NULL    |                |
| parent_id         | int(11)          | NO   |     | 0       |                |
| gender            | int(11)          | NO   |     | 1       |                |
| birthdate         | date             | YES  |     | NULL    |                |
| address           | varchar(191)     | NO   |     |         |                |
+-------------------+------------------+------+-----+---------+----------------+

моя сеялка

    $faker = \Faker\Factory::create();
        $numberOfStudents = $faker->numberBetween(0, 5);

       for($i = 0; $i < $numberOfStudents; $i++)
       {
           User::firstOrCreate([
               'name' => $faker->name,
               'student_school_id' => $faker->unique()->numberBetween(1, 1000),
               'student_card_no' => $faker->unique()->numberBetween(1, 1000),
               'email' => $faker->email,
               'parent_id' => // I want the expression (random user_id where role = 3) 
               'password' => bcrypt('ggness'),
               'school_id' => 1,
               'role' => 4,
               'confirmed' => 1
           ]);
       }

1 Ответ

1 голос
/ 30 октября 2019

Получить список всех идентификаторов родителей, а затем выбрать случайный из этого списка для каждого учащегося:

//an array of all parents' ids
$parent_ids=User::where('role',3)->pluck('id');

$faker = \Faker\Factory::create();
        $numberOfStudents = $faker->numberBetween(0, 5);

       for($i = 0; $i < $numberOfStudents; $i++)
       {
           User::firstOrCreate([
               'name' => $faker->name,
               'student_school_id' => $faker->unique()->numberBetween(1, 1000),
               'student_card_no' => $faker->unique()->numberBetween(1, 1000),
               'email' => $faker->email,
               'parent_id' => $faker->randomElement($parent_ids),
               'password' => bcrypt('ggness'),
               'school_id' => 1,
               'role' => 4,
               'confirmed' => 1
           ]);
       }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...