快速将 200 多个数据插入到具有关系的表中 - Laravel 5.6

Fastly insert 200+ data to the tables with relationship - Laravel 5.6

Table: 职位空缺

id int unsigned 自动递增 code varchar(191) NULL
start_time 时间戳 NULL
end_time 时间戳 NULL
business_unit_id int unsigned
job_id int unsigned
on_date 日期
break int NULL
shift_id int unsigned
total_numbers 整数

Table: vacancy_details

id int unsigned 自动递增 vacancy_id int unsigned
day_id int unsigned
shift_id int unsigned
rate_type 枚举('flat_rate','hourly_rate') [hourly_rate]
start_time 时间戳 NULL
end_time 时间戳 NULL
break int NULL
total_hours 十进制(10,2) NULL client_rate 十进制(8,2) NULL

Table: vacancy_staff_rates

id int unsigned 自动递增 vacancy_id int unsigned
vacancy_detail_id int unsigned NULL
employment_type_id int unsigned
staff_rate 十进制(8,2) NULL

public function store_multiple($subdomain, Request $request){
    if($request){
        $payloads = $request->data;
        foreach($payloads as $payload){
            $payload = (object) $payload;
            //insertion(3 tables) and all the calculations and logic are doing in this add_vacancy()
            $vacancy = Vacancy::add_vacancy($payload);
        }
    }
}

这是 3 个表格。当我添加 10 或 20 时,插入速度很快,但添加 100 或更多时需要更多时间。任何人都可以建议一种方法吗?

建议:

将 200 行收集到单独的 table(可能是 TEMPORARY table)。然后在此 table 中根据需要调整值。一些(全部?)按摩可以批量完成;也就是说,同时显示所有 200 行。如果您需要“规范化”(将一些字符串转换为 ID),现在正是这样做的好时机。

然后,最后一步 INSERT INTO real SELECT ... FROM temp 将它们放在它们所属的位置。