当我尝试将多个数据同时保存到数据库中时,我的代码有问题,这是我保存到数据库中的代码:
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');
每次我都想保存,我只能将最后一个数据阵列保存到数据库中。有人能帮助我吗?或者,如果有人可以提供教程,那将是一个真正的帮助。
答案 0 :(得分:8)
通过循环多个值来创建数组。
$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();
}
希望这些代码可能会有所帮助。
答案 1 :(得分:3)
每次都必须创建模型的New对象。或者你只是覆盖。
答案 2 :(得分:2)
$command = Yii::app()->db->createCommand();
$command->insert('table_name',array('column_1'=>$value_1),
'column_2'=>$value_2));
等等。
答案 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');