Вставка нескольких данных в базу данных в Yii 2

php yii2

17926 просмотра

5 ответа

У меня проблема с моим кодом, когда я пытаюсь сохранить несколько данных в базу данных одновременно, это мой код для сохранения в базу данных:

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

каждый раз, когда я пытаюсь сохранить, я получаю только последний массив данных, который можно сохранить в базе данных. кто-нибудь может мне помочь? или если кто-то может предоставить учебник, это будет реальная помощь.

Автор: Shinoda_ Источник Размещён: 12.11.2019 09:03

Ответы (5)


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

Надеюсь, что этот код может быть полезным.

Автор: Kailas Размещён: 26.03.2015 09:00

3 плюса

Вы должны каждый раз создавать новый объект модели. Или иначе ты просто перезаписываешь.

Автор: Jørgen Размещён: 26.03.2015 06:45

2 плюса

  1. Вы можете использовать Yii Command Builder для достижения этой цели.
$command = Yii::app()->db->createCommand();

$command->insert('table_name',array('column_1'=>$value_1),
'column_2'=>$value_2));

и так далее.

  1. Запишите этот код в цикле, и он будет вставлять все записи одну за другой.
Автор: kammy Размещён: 26.03.2015 06:55

0 плюса

Вы можете использовать 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();

Проверьте ссылку для этого .

Автор: Kshitiz Размещён: 02.02.2018 05:42

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');
Автор: bipin panday Размещён: 29.03.2018 07:14
Вопросы из категории :
32x32