Use of insertOnDuplicate query using Magento 2, You need to create a Connection object first to run the query using ResourceConnection class.
When you insert any new row into a table if the row causes a duplicate in the Primary key or UNIQUE index, throw an error in MySQL.
Base Definition of function:
/** * Inserts a table row with specified data. * * @param mixed $table The table to insert data into. * @param array $data Column-value pairs or array of column-value pairs. * @param array $fields update fields pairs or values * @return int The number of affected rows. */ public function insertOnDuplicate($table, array $data, array $fields = []);
Example,
<?php
namespace Your\PathTo\Model;
use Magento\Framework\App\ResourceConnection;
class InserOnDuplicateQuery
{
public function __construct(
ResourceConnection $resourceConnection
) {
$this->resourceConnection = $resourceConnection;
}
/**
* InsertOnDuplicate SQL Query
*/
public function insertOnDuplicateQuery()
{
$connection = $this->resourceConnection->getConnection();
$tableName = "Your_TableName";
$data = ["column_name1" => "value1", "column_name2" => "value2"]; // Key_Value Pair
return $connection->insertOnDuplicate($tableName, $data, []);
}
}
The first
argument is tableName
The second
argument is the key-value pair of an array.
The third
argument is optional for the table's field of array. (update fields pairs column name)
Check for other Direct SQL Query in Magento 2

Rakesh, is this an example of a class or PHP code? if the class then “class” annotation is missing, if pure PHP code, then why there is a __construct()?
@maxpronko:disqus I have added a Class name in above example.