Вставка нескольких данных в базу данных в Yii 2
У меня проблема с моим кодом, когда я пытаюсь сохранить несколько данных в базу данных одновременно, это мой код для сохранения в базу данных:
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');
каждый раз, когда я пытаюсь сохранить, я получаю только последний массив данных, который можно сохранить в базе данных. кто-нибудь может мне помочь? или если кто-то может предоставить учебник, это будет реальная помощь.
5 ответов
Создайте массив, зациклив несколько значений.
$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(); }
Надеюсь, что этот код поможет полностью.
Вы должны каждый раз создавать новый объект модели. Или иначе ты просто перезаписываешь.
- Вы можете использовать Yii Command Builder для достижения этой цели.
$command = Yii::app()->db->createCommand();
$command->insert('table_name',array('column_1'=>$value_1),
'column_2'=>$value_2));
и так далее.
- Запишите этот код в цикле, и он будет вставлять все записи одну за другой.
Вы можете использовать Yes It 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();
Проверьте ссылку для этого.
Я думаю, что пакетная вставка является лучшим решением для этой проблемы.
но есть одна проблема с вашим изображением кода: этот код создаст только одну строку данных (первую строку) в таблице данных и обновится до той же модели
Решение для вашего кода
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');
foreach ($data as $key=>$value) {
$model = new ModelNeme(); //optional
$model->route = $_POST['name'][$key];
$model->save();
}
return $this->redirect('index');