РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
288 of 1392 menu

Метод updateOrInsert

Метод updateOrInsert применяется к запросу Query Builder и используется для вставки записи в базу данных, либо для обновления существующей записи, если она уже присутствует. Первым параметром передаётся массив условий для поиска записи, вторым - массив данных для обновления или вставки. Если запись найдена, она обновляется переданными данными, если нет - создаётся новая запись, объединяя условия поиска и данные для вставки.

Синтаксис

<?php DB::table($table)->updateOrInsert($searchConditions, $data); ?>

Пример

Давайте обновим или вставим запись в таблице 'users'. Если пользователь с 'email' равным 'user@example.com' существует, обновим его 'name' и 'age', если нет - создадим нового пользователя:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('users')->updateOrInsert( ['email' => 'user@example.com'], ['name' => 'John Doe', 'age' => 30] ); echo $res; ?>

Результат выполнения кода:

"true"

Пример

Давайте обновим или вставим запись, используя несколько условий для поиска. Если существует запись с 'email' равным 'admin@site.com' и 'role' равным 'admin', обновим её 'status' на 'active', иначе создадим новую запись:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('users')->updateOrInsert( ['email' => 'admin@site.com', 'role' => 'admin'], ['status' => 'active'] ); echo $res; ?>

Результат выполнения кода:

"true"

Пример

Давайте обновим или вставим запись, а затем проверим, была ли она вставлена или обновлена. Для этого используем метод exists для проверки существования записи перед вызовом updateOrInsert:

<?php use Illuminate\Support\Facades\DB; $email = 'test@test.com'; if (DB::table('users')->where('email', $email)->exists()) { echo 'Record updated'; } else { echo 'Record inserted'; } $res = DB::table('users')->updateOrInsert( ['email' => $email], ['name' => 'Test User', 'age' => 25] ); ?>

Результат выполнения кода:

"Record inserted"

Пример

Давайте используем updateOrInsert с более сложными данными для вставки, включая временную метку 'updated_at':

<?php use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Date; $res = DB::table('users')->updateOrInsert( ['email' => 'john@example.com'], [ 'name' => 'John Smith', 'age' => 28, 'updated_at' => Date::now() ] ); echo $res; ?>

Результат выполнения кода:

"true"

Пример

Давайте обновим или вставим запись в таблице 'products', используя 'sku' (артикул) в качестве уникального ключа для поиска:

<?php use Illuminate\Support\Facades\DB; $res = DB::table('products')->updateOrInsert( ['sku' => 'ABC-123'], [ 'name' => 'Laptop', 'price' => 999.99, 'quantity' => 10 ] ); echo $res; ?>

Результат выполнения кода:

"true"

Смотрите также

  • метод updateOrCreate,
    который выполняет аналогичную операцию для Eloquent-моделей
  • метод upsert,
    который выполняет массовую вставку с обновлением записей
  • метод firstOrCreate,
    который находит запись или создаёт новую
  • метод insert,
    который вставляет новые записи в таблицу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить