yii2 upsert в temporary table
Столкнулся с такой проблемой. Создаю временную таблицу
$queryTable = "
CREATE TEMPORARY TABLE tmp_table_export_mac
(
mac VARCHAR(255) NOT NULL,
side VARCHAR(255) NOT NULL,
`count` INT DEFAULT 0 NOT NULL,
campaign_id INT NOT NULL,
PRIMARY KEY (mac)
);
";
Yii::$app->db->createCommand($queryTable)->execute();
После чего пытаюсь сделать upsert, например, так:
$model = new TmpModel();
$model->field3 = 123;
$model->field1 = 'asd';
$model->count = 0;
$model->field2 = 'ddd';
$model->save();
$this->tmpModelRepository->upsert([
'field3' => 123,
'field1' =>'asd',
'count' => 0,
'field2' => 'ddd'
],
['count' => new Expression("count + 1")]);
public function upsert(array $data, array $expression): int
{
$q = \Yii::$app->db->createCommand()->upsert($this->model::tableName(), $data, $expression);
$sql = $q->getRawSql();
return $q->execute();
}
Однако, получаю ошибку
"PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'asd' for key 'field1' in /app/vendor/yiisoft/yii2/db/Command.php:1320<
Начал копать глубже, и заметил, что upsert по какой - то причине не получает primary key у временной таблицы в
php $schema->getTablePrimaryKey($name);
Который работает через
getTableMetadata($name, $type, $refresh)
в
$this->_tableMetadata[$rawName][$type]
Там приходит массив с объектом schema, где primaryKey есть, но так же в этом массиве дублируется ключ primaryKey, который null и из - за этого sql билдится как обычный insert, и я получаю ошибку, которую описал выше.