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, и я получаю ошибку, которую описал выше.


Ответы (0 шт):