在Yii 2中将多个数据插入数据库

时间:2015-03-26 06:13:40

标签: 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');
每次我都想保存,我只能将最后一个数据阵列保存到数据库中。有人能帮助我吗?或者,如果有人可以提供教程,那将是一个真正的帮助。

6 个答案:

答案 0 :(得分:8)

  1. 通过循环多个值来创建数组。

    $data- has multiple values
    $bulkInsertArray = array();
    foreach($data as $value){
       $bulkInsertArray[]=[
           'columnName1'=>$value[0][1],
           'columnName2'=>$value[0][2],
           'columnName3'=>$value[0][3]
       ];
    }
    
  2. 检查$ 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();
    }
    
  3. 希望这些代码可能会有所帮助。

答案 1 :(得分:3)

每次都必须创建模型的New对象。或者你只是覆盖。

答案 2 :(得分:2)

  1. 您可以使用Yii命令构建器来实现此目的。
  2. $command = Yii::app()->db->createCommand();
    
    $command->insert('table_name',array('column_1'=>$value_1),
    'column_2'=>$value_2));
    

    等等。

    1. 将此代码写入循环,它将逐个插入所有记录。

答案 3 :(得分:0)

您可以使用Yes It Is Batch Insert插入多行。它比这里陈述的任何方式都快:

$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();

检查this的链接。

答案 4 :(得分:0)

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

但您的代码图存在一个问题此代码将在数据表中仅创建一个数据行(第一行)并更新到同一模型

您的代码的解决方案是

 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');

答案 5 :(得分:0)

foreach ($data as $key=>$value) {
   $model = new ModelNeme(); //optional
   $model->route = $_POST['name'][$key];
   $model->save();
}
return $this->redirect('index');