将id数组作为不同的实体存储在Laravel-Mysql中



我有一个表

id Primary  bigint(20)UNSIGNED AUTO_INCREMENT,
school_id   bigint(20)UNSIGNED   Foreign Key,
teacher_id  bigint(20)UNSIGNED   Foreign Key,
course_id   bigint(20)UNSIGNED   Foreign Key,
klass_id    bigint(20)UNSIGNED   Foreign Key,

我想在此表中添加一些数据,我的数据如下所示。

{
"school_id":5,
"teacher_id":2,
"course_id":[1,2,3],
"klass_id":[7,8,3],
}

我如何像下面一样存储这些数据

--id|school_id|teacher_id|course_id|klass_id
----------------------------------------------
1 |    5    |     2    |     1   |    7
2 |    5    |     2    |     2   |    8
3 |    5    |     2    |     3   |    3



如果输入总是格式

"school_id" will have 1 value,
"teacher_id" will have 1 value,
"course_id" will have x values,
"klass_id" will have x values,

然后你可以做一些类似的事情:

$mapped = [];
for($i=0; $i<count($data['course_id']); $i++) {
$mapped[] = [
"school_id" => $data['school_id'],
"teacher_id" => $data['teacher_id'],
"course_id" => $data['course_id'][$i],
"klass_id" => $data['klass_id'][$i]
]
}

然后你可以调用任何雄辩的或DB函数来插入,比如:

Model::insertMany($mapped);

p.S.:肯定有更好的方法,我不知道(

是否尝试手动保存此数据?如果是,创建数据库SEED,并以如下数组格式添加这些数据:使用命令php artisan make:seeder CreateSeedTableName创建一个类,并将其添加到以下代码中

$arr = [
[
"school_id" => 5,
"teacher_id" => 2,
"course_id" => 1,
"klass_id" => 7
],
[
"school_id" => 5,
"teacher_id" => 2,
"course_id" => 2,
"klass_id" => 8
],
[
"school_id" => 5,
"teacher_id" => 2,
"course_id" => 3,
"klass_id" => 3
]
];
TableName::insert($arr);

如果请求中有相同格式的数据,也可以使用循环。


$count = count($data['course_id']); //get course count
$schoolId = $data['school_id']; //get school id
$teacherId = $data['teacher_id']; //get teacher id
for ($i = 0; $i < $count; $i++) { 
TableName::create([
'school_id' => $schoolId,
"teacher_id" => $teacherId,
"course_id" => $data['course_id'][$i],
"klass_id" => $data['klass_id'][$i],
]);
}

最新更新