Laravel跨表插入数据时如何将id转为带custom_前缀的custom_id
实现方案
直接在给custom_id赋值时拼接custom_前缀即可,PHP使用.运算符完成字符串拼接,修改后的代码如下:
$qry = DB::table('table1')->get(); foreach($qry as $key => $data_in) { DB::table('table2')->insert([ "custom_id" => 'custom_' . $data_in->id, "status" => $data_in->status ]); }
性能优化方案
如果待迁移的数据量较大,循环单条插入会产生大量SQL请求,性能较差,推荐使用分块查询+批量插入的方式优化:
$insertData = []; // 每次从table1读取100条数据处理,避免内存溢出 DB::table('table1')->orderBy('id')->chunk(100, function ($records) use (&$insertData) { foreach ($records as $item) { $insertData[] = [ 'custom_id' => 'custom_' . $item->id, 'status' => $item->status ]; } }); // 一次性批量插入所有组装好的数据 DB::table('table2')->insert($insertData);
注意事项
- 提前确认
table2的custom_id字段长度足够容纳拼接后的字符串,避免字段长度不足导致数据截断 - 如果
custom_id设置了唯一索引,提前校验拼接后的值无重复,避免插入时唯一冲突报错
内容的提问来源于stack exchange,提问作者leon0012
相关产品推荐
相关产品推荐

