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

С версии: 9.2.0
48

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

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

В примерах ниже мы так же будем работать с таблицей test_table, структуру которой вы можете посмотреть в предыдущей статье Вставка записей (insert)

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

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

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

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

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

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

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

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

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

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