# Обновление записей (update)

Помимо вставки и выборки данных конструктор запросов так же позволяет и обновлять данные в таблицах.\
Так же как и в остальных случаях работы с базой данных нам необходимо получить объект подключения к базе данных.&#x20;

```php
$connection = \Illuminate\Database\Capsule\Manager::connection();
```

В примерах ниже мы так же будем работать с таблицей test\_table, структуру которой вы можете посмотреть в предыдущей статье [Вставка записей (insert)](https://johncms.com/documentation/db-insert/)

## Обновление строки в БД

Рассмотрим пример обновления записи в БД. Так же как и метод **insert** метод **update** принимает пару **название\_колонки => значение**.

```php
$connection->table('test_table')
    ->where('id', '=', 1)
    ->update(
        [
            'name' => 'test name 1',
            'text' => 'text text text 1',
        ]
    );
```

Указанный пример обновит строку с идентификатором 1 в таблице **test\_table** и установит значения столбцов, переданные в методе **update**. Обратите внимание, что мы ещё добавили вызов метода **where**, который устанавливает условие выборки. Для уточнения выборки может вызываться так же несколько методов **where** чтобы задать точное условие выборки записей, которые нужно обновить.

## Обновление или вставка

Часто встречается ситуация, когда нам нужно обновить запись в базе данных если она уже есть или же вставить если её нет. Обычно это делается вручную. Проверяется наличие записи в БД, и в зависимости от этого вызываются методы на вставку или обновление записи. Это не всегда удобно и заставляет писать много кода.\
Конструктор позволяет упростить выполнение этой операции. По факту он делает то же самое, но для выполнения этих действий вам не нужно вручную писать выборку, проверку и вставку или обновление.

Рассмотрим на примере:

```php
$connection->table('test_table')
    ->updateOrInsert(
        [
            'name' => 'test',
        ],
        [
            'text' => 'text text text 1',
        ]
    );
```

В этом примере будет выполнен поиск строки с полем **name** в котором содержится значение **test** и если эта запись уже существует, в ней будет обновлено поле **text**. Если такой строки в БД найдено не будет, то она будет вставлена с обоими значениями.\
Подытожим. Метод **updateOrInsert** принимает 2 массива. В первом аргументе принимается массив с условиями, которые будет выполнен поиск записи, а во втором будут значения, которые будут установлены. Если записи не существует, то будет вставлена новая запись со значениями из обоих массивов.

{% hint style="info" %}
Обратите внимание, что вам не нужно заботиться о защите от SQL инъекций. При выполнении запросов в конструкторе используются подготовленные запросы, благодаря чему выполнение запросов становится безопасным. Но учтите, что это не избавляет вас от необходимости делать данные безопасными при выводе из базы данных там где это необходимо.
{% endhint %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.johncms.com/10.0/baza-dannykh/obnovlenie-zapisei-update.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
