laravel种子程序根据数据库中的现有数据在列中分配一个值



我有一个字段为parent_idusers表,我想种子,但我的问题是我希望parent_id列的值基于同一个表users。我想要基于我的users表中的role = 3parent_id。我如何实现这一点?用户和学生表是相同的。它只在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 = FakerFactory::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
]);
}

获取所有家长id的列表,然后从该列表中为每个学生随机选择一个:

//an array of all parents' ids
$parent_ids=User::where('role',3)->pluck('id');
$faker = FakerFactory::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
]);
}

最新更新