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');
每次我试图保存时,我都只能得到最后一个可以保存到数据库中的数据数组。有人能帮我吗?或者,如果有人能提供一个教程,那将是一个真正的帮助。您必须每次创建一个新的模型对象。否则你只是在重写
$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]
];
}
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');