Laravel 5.5-更新或创建批量插入

时间:2018-12-27 09:19:49

标签: laravel

我正在尝试使用laravel模型对许多记录进行更新或创建操作。 带有updateOrCreate的普通插入与foreach完美配合,但是由于它减慢了速度,我想避免使用它。 我有大约200,000条记录。 有什么办法可以达到目的吗? 我在下面尝试了这个答案 https://stackoverflow.com/a/34815725/1239122 但这不是超级优雅。 蚂蚁的想法?

6 个答案:

答案 0 :(得分:0)

据我所知,您无法检查更新的条件,但是您可以执行插入操作

$data = array(
 array('name'=>'John', 'phone'=>'1234567890'),
 array('name'=>'Deo', 'phone'=>'9876543210'),
 //...
);

Model :: insert($ data);

答案 1 :(得分:0)

插入并更新您可以这样做

datas[]  //base array

foreach($Data as $key => $datas){  //loop
$model = new Model; //create new variable of inserting model
$model->fill( $Data ); // fill data into array 
$model->save(); // save the data
}

答案 2 :(得分:0)

您可以在查询生成器中使用insert()进行批量插入。但是更新语句需要条件。请阅读文档: https://laravel.com/docs/5.7/eloquent#updates

答案 3 :(得分:0)

您可以尝试使用该库进行批量插入和更新。

https://github.com/mavinoo/laravelBatch

答案 4 :(得分:0)

我找不到在一个查询中批量插入或更新的方法。但是我只处理了3个查询。我有一个表名 <div className="row "> <div className="col-md-5 order-md-2">LOGO</div> <div className="col-md-7 order-md-1">TITLE</div> </div> 。在这里,我想针对运输区域更新运输成本。该表shipping_costsidarea_idcostcreated_at中只有5列。

updated_at

答案 5 :(得分:0)

Laravel 8 在查询构建器 upsert 中有一个 on system 函数。