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.