如何快速得将数据同步到数据库 $datas 大概500条数据 就执行8秒

foreach ($datas as $data) {
if(!$data[‘category_names’]){
continue;
} //验证商品分类是否存在
/** $category = $this->getCategoryByNameOrCreate( $storeGuid, $data[‘category_names’] ); */
$isTakeaway = $data[‘isTakeaway’];
$isTakeaway = in_array($isTakeaway, [1, 0]) ? $isTakeaway : 1; // 默认是网上售卖

$commodity=Commodity::query()
->where(‘No’,$data[‘no’])
->where(‘StoreGuid’,$storeGuid)
->first();

$commodity_data=[
‘StoreGuid’=>$storeGuid,
‘No’=>$data[‘no’],
‘Name’ => $data[‘name’],
‘SecondName’ => $data[‘secondName’],
‘Description’ => $data[‘description’]??’’,
‘Price’ => $data[‘price’],
‘SecondPrice’ => $data[‘secondPrice’],
‘ThirdPrice’ => $data[‘thirdPrice’],
‘Tax’ => $data[‘tax’],
‘IsTakeaway’ => $isTakeaway,
‘UnitGuid’ => ‘’,
‘Type’ => Commodity::TYPE_GENERAL,
‘Stock’ =>$data[‘stock’]??0,
‘Barcode’ => $data[‘barcode’]??’’,
‘Enabled’ => $data[‘enabled’]??true,
‘Deleted’ => false,
‘add_cart_quantity’ => $data[‘add_cart_quantity’]??0,
‘synchronous_platform’ => $synchronous_platform,
//‘CategoryGuid’ => $category[‘guid’]??’’
];
if(!$commodity){
$commodity=new Commodity();
$commodity_data[‘Guid’]=$this->uuid();
}
$commodity->fill($commodity_data);
$commodity->save();

/**
if(!empty($commodity->No) && !empty($data[‘path’])){ $CommodityImage=CommodityImage::query() ->where([ [‘CommodityNO’,’=’,$commodity->No], [‘StoreGuid’,’=’,$storeGuid] ])->select(‘Id’)->first(); $data=[ ‘Path’=>$data[‘path’] ]; if(empty($CommodityImage)){ $CommodityImage=new CommodityImage(); $data[‘Guid’]=$this->uuid(); $data[‘CommodityNO’]=$commodity->No; $data[‘CommodityGuid’]=$commodity->Guid; $data[‘StoreGuid’]=$storeGuid; } $CommodityImage->fill($data); $CommodityImage->save(); } */}

讨论数量: 2

批量插入不行吗?

2年前 评论
lijizheng (楼主) 2年前
lijizheng (楼主) 2年前
勇敢的心 (作者) 2年前
lijizheng (楼主) 2年前
yzh52521 2年前
lijizheng (楼主) 2年前

你这个怎么遍历去插入呢,这样子肯定慢啊,批量插入的SQL语句 INSERT INTO {表名} (字段1,字段2, … ) VALUES (字段1对应的值,字段2对应的值,…) , (字段1对应的值,字段2对应的值,…) , (字段1对应的值,字段2对应的值,…) …

你把数据组装成这个语句,一条语句就可以执行了,最多就几十毫秒

补充,如果你有更新或者新增 就把 INSERT换成REPLACE,不过要有唯一主键控制。

如果是多个表,你换种方案吧,不要在循环里面做更新数据库的操作

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!