Как в yii2 построить запрос upsert с массивом?

В Yii2 безвозвратной вставки или обновления записи с использованием запроса upsert с массивом не предусмотрено стандартными средствами. Однако, вы можете воспользоваться расширением Activerecord Upsert, чтобы реализовать такую функциональность.

1. Установка расширения:
Для начала, добавьте расширение в файл composer.json вашего проекта. Выполните команду composer require yii2tech/ar-upsert для установки пакета.

{
    "require": {
        "yii2tech/ar-upsert": "*"
    }
}

2. Использование расширения:
После установки расширения, вы можете использовать метод upsert() для выполнения запроса upsert с массивом.

use yiidbActiveRecord;
use yii2techarupsertUpsert;

class YourModel extends ActiveRecord
{
    public static function tableName()
    {
        return 'your_table';
    }

    public function behaviors()
    {
        return [
            [
                'class' => Upsert::class,
                'updateAttributes' => ['attribute1', 'attribute2'],
            ],
        ];
    }
}

В приведенном примере, метод upsert() будет проверять наличие записи в базе данных на основе первичного ключа. Если запись существует, то будут обновлены атрибуты, указанные в свойстве updateAttributes (в данном случае attribute1 и attribute2). Если запись не существует, она будет вставлена в базу данных.

Вы можете использовать метод upsert() следующим образом:

$model = YourModel::findOne($primaryKey);
$model->attribute1 = 'value1';
$model->attribute2 = 'value2';
$model->upsert();

Таким образом, вы можете использовать расширение Activerecord Upsert для выполнения запроса upsert с массивом в Yii2. Обратите внимание, что для корректной работы функции upsert требуется указание первичного ключа вашей модели. Если ваша таблица не имеет первичного ключа, вы должны внести необходимые изменения в метод tableName() вашей модели для использования альтернативного первичного ключа или составного первичного ключа.