Magento2 – Insert Multiple Rows Without Calling Model Save Inside Loop

magento2modelsave

Following code is working fine.

$data = $this->_customDataSave->create();
$data->setUsername($this->getUsername());
$data->setFullname($this->getFullname());
$data->setEmail($this->getEmail());
$data->save();

But I need to execute this piece of code in the loop to insert multiple of rows of data.
I don't want to call save inside loop.
How can I do that without calling save inside loop?

Best Answer

Use insertMultiple function of class Magento\Framework\App\ResourceConnection

protected $connection;

protected $resource;

public function __construct(
    ...
    \Magento\Framework\App\ResourceConnection $resource,
    ...
) {
    $this->connection = $resource->getConnection();
    $this->resource = $resource;
}

public function insertMultiple($table, $data)
{
    try {
        $tableName = $this->resource->getTableName($table);
        return $this->connection->insertMultiple($tableName, $data);
    } catch (\Exception $e) {
       //Error
    }
}

Now you can use insertMultiple() function like

foreach($records as $record) {
    $bulkInsert[] = [
        'user_name' => $record['user_name'],
        'email' => $record['email']
    ];
}

$this->insertMultiple('my_table', $bulkInsert);
Related Topic