laravel - Laravel 慢插入
问题描述
我在网格中有超过 8k 条记录,当我发布它们并使用如下插入代码运行循环时,插入需要超过 10 分钟,
for($i=0; $i< count($emp_code); $i++)
{
$objLabor = new Labor;
$objLabor->project_id = $project_id;
$objLabor->emp_code = $emp_code[$i];
$objLabor->emp_name = $emp_name[$i];
$objLabor->emp_profession = $emp_profession[$i];
if($salary_date[$i] != "") $objLabor->salary_date = date("Y-m-d H:i:s", strtotime($salary_date[$i] ));
if($salary_period_from[$i] != "") $objLabor->salary_period_from = date("Y-m-d H:i:s", strtotime($salary_period_from[$i]));
if($salary_period_to[$i] != "") $objLabor->salary_period_to = date("Y-m-d H:i:s", strtotime($salary_period_to[$i]));
$objLabor->quantity = $quantity[$i];
$objLabor->uom = $uom_id[$i];
if($rate[$i] != "") $objLabor->rate = AppHelper::instance()->formatCurrency($rate[$i]);
$objLabor->basic_amount = $quantity[$i] * doubleval($objLabor->rate);
if($allowance[$i] != "") $objLabor->allowance = AppHelper::instance()->formatCurrency($allowance[$i]);
if($deduction[$i] != "") $objLabor->deduction = AppHelper::instance()->formatCurrency($deduction[$i]);
if($overtime[$i] != "") $objLabor->overtime = AppHelper::instance()->formatCurrency($overtime[$i]);
$addUp = doubleval($objLabor->basic_amount) + doubleval($objLabor->allowance) + doubleval($objLabor->overtime);
$objLabor->net_amount = $addUp - doubleval($objLabor->deduction);
$objLabor->budget_node_id = $budget_code[$i];
$objLabor->remarks = $remarks[$i];
$objLabor->budget_node_remarks = $budget_code_remarks[$i];
$objLabor->added_by = Auth::id();
$objLabor->added_on = date("Y-m-d H:i:s");
$objLabor->batch_id = $objBulkImportHistory->id;
$objLabor->save();
}
但是当我让它插入查询时,它会在几秒钟内执行
for($i=0; $i< count($emp_code); $i++)
{
DB::query('insert into labor (project_id, emp_code, emp_name,emp_profession,added_by,batch_id,added_on)
values (' . $project_id . ', ' . $emp_code[$i] . ',' . $emp_name[$i]. ',' . $emp_profession[$i]
. ',' . $user_id . ',' . $bulk_id . ',' . date("Y-m-d H:i:s") .')');
}
这是我的模型
namespace a2zcost;
use Illuminate\Database\Eloquent\Model;
class Labor extends Model
{
protected $table = 'labor';
public $timestamps = false;
}
可能是什么问题?我错过了什么或做得不对?
解决方案
您需要进行大量插入
$insertAbleObjLabors = [];
for($i=0; $i< count($emp_code); $i++)
{
$objLabor = new Labor;
$objLabor->project_id = $project_id;
$objLabor->emp_code = $emp_code[$i];
$objLabor->emp_name = $emp_name[$i];
$objLabor->emp_profession = $emp_profession[$i];
if($salary_date[$i] != "") $objLabor->salary_date = date("Y-m-d H:i:s", strtotime($salary_date[$i] ));
if($salary_period_from[$i] != "") $objLabor->salary_period_from = date("Y-m-d H:i:s", strtotime($salary_period_from[$i]));
if($salary_period_to[$i] != "") $objLabor->salary_period_to = date("Y-m-d H:i:s", strtotime($salary_period_to[$i]));
$objLabor->quantity = $quantity[$i];
$objLabor->uom = $uom_id[$i];
if($rate[$i] != "") $objLabor->rate = AppHelper::instance()->formatCurrency($rate[$i]);
$objLabor->basic_amount = $quantity[$i] * doubleval($objLabor->rate);
if($allowance[$i] != "") $objLabor->allowance = AppHelper::instance()->formatCurrency($allowance[$i]);
if($deduction[$i] != "") $objLabor->deduction = AppHelper::instance()->formatCurrency($deduction[$i]);
if($overtime[$i] != "") $objLabor->overtime = AppHelper::instance()->formatCurrency($overtime[$i]);
$addUp = doubleval($objLabor->basic_amount) + doubleval($objLabor->allowance) + doubleval($objLabor->overtime);
$objLabor->net_amount = $addUp - doubleval($objLabor->deduction);
$objLabor->budget_node_id = $budget_code[$i];
$objLabor->remarks = $remarks[$i];
$objLabor->budget_node_remarks = $budget_code_remarks[$i];
$objLabor->added_by = Auth::id();
$objLabor->added_on = date("Y-m-d H:i:s");
$objLabor->batch_id = $objBulkImportHistory->id;
$insertAbleObjLabors[] = $objLabor->toArray();
}
Labor::insert($insertAbleObjLabors);
推荐阅读
- javascript - 从文本框 id 中选择值到 PHP
- javascript - 创建构建时,我的应用程序是否会上传到 expo?
- typescript - 如何将cdk镜像资产部署到ecs集群
- r - 如何在 Rstudio 中创建分支的 git 分支以分别处理各个功能
- php - 如何将数组的第一个值发送到 php telegram bot 中的 sendmessage 方法?
- python - 通过 SSH 运行 python 脚本可以工作,但不能通过 paramiko。找不到系统库
- visual-studio - 无法创建新的 Prism 项目
- php - 使用数据库中的数据更改按钮颜色
- docker - 我不明白为什么我的数据在没有卷绑定的情况下仍然存在
- php - PHP - 注销脚本不起作用。即使变量应该为假,也已登录