Query Builder: DELETE

Для удаления записей из таблицы используется метод delete. Метод возвращает количество удаленных строк.

use Imhotep\Facades\DB;

$deleted = DB::table('users')->where('id', 1)->delete();
PHP

Важно: Вызов delete() без условий удалит все записи из таблицы.

Удаление с условиями

Как и при обновлении, перед удалением можно применять любые условия:

use Imhotep\Facades\DB;

// Удалить неактивных пользователей
$deleted = DB::table('users')
    ->where('active', false)
    ->delete();

// Удалить пользователей младше 18 лет
$deleted = DB::table('users')
    ->where('age', '<', 18)
    ->delete();

// Удалить с использованием вложенных условий
$deleted = DB::table('users')
    ->where(function ($query) {
        $query->where('status', 'banned')
              ->orWhere('status', 'deleted');
    })
    ->delete();
PHP

Удаление в транзакциях

Для гарантии целостности данных при удалении связанных записей используйте транзакции:

use Imhotep\Facades\DB;

DB::transaction(function () {
    // Удалить посты пользователя
    DB::table('posts')->where('user_id', 1)->delete();
    
    // Затем удалить самого пользователя
    DB::table('users')->where('id', 1)->delete();
    
    // Если что-то пойдет не так, все изменения будут отменены
});
PHP

Очистка таблицы (TRUNCATE)

Метод truncate удаляет все записи из таблицы и сбрасывает счетчик автоинкремента. Это быстрее, чем delete() без условий.

use Imhotep\Facades\DB;

// Очистить таблицу users
DB::table('users')->truncate();

// Очистить с дополнительными опциями
DB::table('users')->truncate(
    restartIdentity: true, // Сбросить счетчик автоинкремента
    cascade: false         // Каскадное удаление (для внешних ключей)
);
PHP

Важно: truncate удаляет ВСЕ записи и не может быть использован с условиями WHERE.