Yii2, upsert - оновлюємо або додаємо запис у БД

25 серпня 2024 р. 147 egor

Upsert() додати новий запис до таблиці, якщо запис ще не існує, або оновить його.

Припустимо, нам необхідно додати новий запис із назвою «My Product 0001» у таблицю product або оновити поле visits, якщо запис вже існує. Поле name - унікальне, саме за полем name метод upsert зрозуміє, чи існує запис для оновлення, чи потрібно його додавати.

upsert($table, $insertColumns, $updateColumns = true, $params = [])

Upsert та QueryBuilder:

$sql = $queryBuilder->upsert('product', [
        'name' => 'My Product 0001', //унікальне поле
        'visibility' => 1,
        'visits' => 1
    ],
    [
        'visits' => new \yii\db\Expression('visits + 1'),
    ],
    []
);

Upsert та createCommand:

Yii::$app->db->createCommand()->upsert('pages', 
    [
        'name' => 'My Product 0001', //унікальне поле
        'visibility' => 1,
        'visits'
    ], [
        'visits' => new \yii\db\Expression('visits + 1'),
    ], 
    [])->execute();