I have problem with my code when i\'m trying to save multiple data into database at the same time, this is my code to save into database:
foreach ($data as $
foreach ($data as $key=>$value) {
$model = new ModelNeme(); //optional
$model->route = $_POST['name'][$key];
$model->save();
}
return $this->redirect('index');
Create an array by looping your multiple values.
$data- has multiple values
$bulkInsertArray = array();
foreach($data as $value){
$bulkInsertArray[]=[
'columnName1'=>$value[0][1],
'columnName2'=>$value[0][2],
'columnName3'=>$value[0][3]
];
}
Check $bulkInsertArray in not empty
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();
}
Hope these code may be helpful.
You can use Yes It Is Batch Insert to insert multiple rows. It is faster than any of the ways stated here :
$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();
Check the link for this.
$command = Yii::app()->db->createCommand();
$command->insert('table_name',array('column_1'=>$value_1),
'column_2'=>$value_2));
and so on.
I think batch insert is the best solution for this problem.
but there is one problem with your pic of code that is this code will create only one data row(first row) in data table and update to that same model
solution for your code is
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');
You have to create a New object of the model each time. Or Else youre Just overwriting.