Laravel Multi Insert问题,引用值

Awa*_*rni 10 php laravel eloquent laravel-5.2

我需要在数据库表中插入一大组记录.我从CSV文件中获取数据.我考虑过使用多插入语句以获得良好的性能.所以我做了类似以下的事情:

 foreach($data as $key => $value) {

   $insert[] = [
                'id' => $value->id, 'is_published' => $value->is_published,
                "first_name" => $value->first_name, "middle_name" => $value->middle_name, "last_name" => $value->last_name,
                "description" => $value->description,
                "created_at" => date("Y-m-d H:i:s",strtotime($value->created_at)),
                "updated_at" => date("Y-m-d H:i:s",strtotime($value->changed_at))
            ];
 }

 if(!empty($insert)){
     Model::insert($insert);
 }
Run Code Online (Sandbox Code Playgroud)

但是这样做我总是看到错误:

mysql服务器消失了.

我通过打印查询来调试它,我发现通过这样做,Laravel不会在描述值中处理单引号或双引号,因为它在使用时会自动执行$model::save();.如果描述值中包含单引号'或双引号",则打印的查询版本会中断.

但是,如果我做一些像

foreach($data as $key=>$value){
   $model = new Model();
   $model->id = $value->id;
   $model->description = $value->description;
   blah blah bla

   $model->save();
}
Run Code Online (Sandbox Code Playgroud)

它成功运行而不会产生任何错误.任何人都可以让我知道如何纠正这个问题?

Vik*_*ash 2

由于大量数据,报价问题没有任何问题。当您尝试使用多重插入一次插入所有行时,数据集会变得太重。您要么需要增加 max_allowed_pa​​cket,要么需要分块进行。您可以为此使用块。假设您想一次插入 100 个元素。你可以做类似的事情。

 if(!empty($insert))
 {

    $collection = collect($insert)->chunk(100)->toArray();

    foreach ($collection as $insert)
    {
       // It will insert 100 items at a time

        Model::insert($insert);
    }

 }
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助:)