Php 将多个数据插入Yii 2中的数据库

Php 将多个数据插入Yii 2中的数据库,php,yii2,Php,Yii2,当我试图同时将多个数据保存到数据库中时,我的代码有问题,这是我要保存到数据库中的代码: foreach ($data as $value) { $model->route = $value[0][1]; $model->begin_point = $value[0][2]; $model->begin_point = $value[0][3]; $model->save(); } return $this->redirect('index')

当我试图同时将多个数据保存到数据库中时,我的代码有问题,这是我要保存到数据库中的代码:

foreach ($data as $value) {
   $model->route = $value[0][1];
   $model->begin_point = $value[0][2];
   $model->begin_point = $value[0][3];
   $model->save();
}
return $this->redirect('index');

每次我试图保存时,我都只能得到最后一个可以保存到数据库中的数据数组。有人能帮我吗?或者,如果有人能提供一个教程,那将是一个真正的帮助。

您必须每次创建一个新的模型对象。否则你只是在重写

  • 您可以使用Yii命令生成器来实现这一点
    $command=Yii::app()->db->createCommand();
    $command->insert('table_name',array('column_1'=>$value_1),
    ‘column_2’=>$value_2));
    
    等等

  • 在循环中编写此代码,它将一个接一个地插入所有记录
  • 通过循环多个值来创建数组

    $data- has multiple values
    $bulkInsertArray = array();
    foreach($data as $value){
       $bulkInsertArray[]=[
           'columnName1'=>$value[0][1],
           'columnName2'=>$value[0][2],
           'columnName3'=>$value[0][3]
       ];
    }
    
  • 检查非空中的$bulkInsertArray

    if(count($bulkInsertArray)>0){
        $columnNameArray=['columnName1','columnName2','columnName3'];
        // below line insert all your record and return number of rows inserted
        $insertCount = Yii::$app->db->createCommand()
                       ->batchInsert(
                             $tableName, $columnNameArray, $bulkInsertArray
                         )
                       ->execute();
    }
    

  • 希望这些代码可能会有所帮助。

    您可以使用“是”,即批量插入以插入多行。它比此处所述的任何方法都要快:

    $connection->createCommand()->batchInsert('table_name', ['table_column_1', 'table_column_2'], [
        ['column_1_data_a', 'column_2_data_a'],
        ['column_1_data_b', 'column_2_data_b'],
        ['column_1_data_c', 'column_2_data_c'],
    ])->execute();
    

    查看链接。

    我认为批量插入是解决此问题的最佳方法

    但您的pic代码有一个问题,即此代码将在数据表中只创建一个数据行(第一行),并更新到同一模型

    代码的解决方案是

     foreach ($data as $value) {
        $model = new Model(); // creating new instance of model 
        $model->route = $value[0][1];
        $model->begin_point = $value[0][2];
        $model->begin_point = $value[0][3];
        $model->save();
      }
      return $this->redirect('index');
    

    可以使用batchInsert()一次插入多条记录。有关更多详细信息:@chinmay谢谢,在您使用Yii的db命令时非常有用。-在循环中使用对象将是非常低效和糟糕的解决方案,特别是对于潜在的大量数据。你真的打算在一个循环中加载一个对象1000次以导入1000个项目吗?下面是一个显示差异和用途的并排分解图:-对于op,请查看@Kailas回答的批插入。对于非常大的导入,将数据分为批次,例如500/循环。问题:我正在使用的一个API(非常糟糕)返回所有记录(总共约3000条)-我想批量上载,但只上载新记录和更改的记录,如果没有foreach循环,我怎么做?这不会缩短我们的存储寿命吗?cz如果我有250000个数据,那么我需要将250000次数据写入我的存储器,而不是只写入一次较大的数据?还是会给我们的存储带来同样的结果??
    foreach ($data as $key=>$value) {
       $model = new ModelNeme(); //optional
       $model->route = $_POST['name'][$key];
       $model->save();
    }
    return $this->redirect('index');