Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 582новые вакансии за сутки·92 562вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 220
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 105
  • Облачные технологии14 068
  • QA вакансии3 460
  • Backend вакансии2 098
  • Инженер данных1 796
  • Продакт-менеджер1 248

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии979
  • AI вакансии951
  • Frontend вакансии742
  • Mobile вакансии44

По стеку

  • Go8 651
  • Java6 544
  • Node.js2 018
  • .NET1 719
  • Kotlin1 623
  • Rust1 453
  • C#709
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 761
  • DevOps вакансии6 057
  • Linux-инфраструктура5 492
  • Terraform / IaC4 259
  • CI/CD3 240
  • Мониторинг и Observability1 782
  • SRE565
  • Кибербезопасность450

Аналитика и данные

  • Data Scientist1 127
  • Бизнес-аналитик925
  • Аналитик данных845
  • Системный аналитик154

Другие направления

  • Проджект-менеджер611
  • UI/UX дизайн145
  • Ручное тестирование14

По регионам

  • Вакансии в США43 686
  • Вакансии в Европе23 668
  • Вакансии в Канаде4 413
  • Работа в России3 909

По формату

  • Удалённые вакансии73 889
  • Релокация в США43 686
  • Гибридная работа12 392
  • Офисная работа7 088

По уровню

  • Senior вакансии42 236
  • Middle вакансии20 545
  • Junior вакансии6 653

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме LaravelВсе вопросы
LaravelMiddleКодинг

Как реализовать soft deletes в Laravel?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Soft deletes реализуются через трейт SoftDeletes в модели и метод softDeletes() в миграции. Удалённые записи помечаются в поле deleted_at и фильтруются автоматически; восстановление — через restore(), включение в запрос — через withTrashed().

Настройка модели

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Article extends Model
{
    use SoftDeletes;

    protected $fillable = ['title', 'body', 'user_id'];
}

Soft Deletes в Laravel

Soft delete (мягкое удаление) — это подход, при котором запись не удаляется из базы данных физически, а помечается временной меткой в поле deleted_at. Все стандартные запросы Eloquent автоматически фильтруют такие записи через WHERE deleted_at IS NULL.

Добавление колонки в миграции

Schema::create('articles', function (Blueprint $table) {
    $table->id();
    $table->string('title');
    $table->text('body')->nullable();
    $table->timestamps();
    $table->softDeletes(); // добавляет deleted_at TIMESTAMP NULL
});

// Для существующей таблицы
Schema::table('articles', function (Blueprint $table) {
    $table->softDeletes();
});

Базовые операции

// Мягкое удаление — устанавливает deleted_at = now()
$article = Article::find(1);
$article->delete();

// Проверить, удалена ли запись
$article->trashed(); // true

// Восстановить запись
$article->restore();

// Физически удалить из БД
$article->forceDelete();

Запросы с учётом удалённых записей

// Обычный запрос — удалённые записи НЕ включаются
$articles = Article::all(); // WHERE deleted_at IS NULL

// Включить удалённые
$allArticles = Article::withTrashed()->get();

// Только удалённые
$deletedArticles = Article::onlyTrashed()->get();

// Восстановить пачку по условию
Article::onlyTrashed()
    ->where('user_id', 42)
    ->restore();

Soft deletes и связи

По умолчанию Eloquent отношения тоже фильтруют удалённые записи. Чтобы включить их явно:

// В определении отношения
public function comments()
{
    return $this->hasMany(Comment::class)->withTrashed();
}

// Каскадное мягкое удаление связей через Observer
class ArticleObserver
{
    public function deleted(Article $article): void
    {
        $article->comments()->delete(); // тоже soft delete
    }

    public function restored(Article $article): void
    {
        $article->comments()->onlyTrashed()->restore();
    }
}

Уникальные индексы и soft deletes

Если есть уникальный индекс (например, на slug), мягко удалённые записи с таким же slug заблокируют создание новых. Решение — составной уникальный индекс с deleted_at:

$table->unique(['slug', 'deleted_at']);

Или использовать whereNull('deleted_at') в validation rule вручную.

Подводные камни

  • Физический внешний ключ FK не знает о soft deletes — запись с deleted_at != null всё равно блокирует удаление родительской таблицы. Используйте ->cascadeOnDelete() аккуратно или управляйте каскадом через Observer.
  • Индексы по полям фильтрации (WHERE status = 'active') должны включать deleted_at для эффективной работы — иначе БД сканирует все строки включая удалённые.
  • withTrashed() в production-запросах нужно использовать осознанно: легко случайно отдать удалённые данные пользователям.
  • При использовании Route Model Binding Laravel автоматически применяет WHERE deleted_at IS NULL — мягко удалённая запись вернёт 404. Если нужно показать её, используйте явный запрос вместо биндинга.
  • forceDelete() не вызывает событие deleting если модель уже soft-deleted — будьте осторожны с Observers, которые рассчитывают на это событие.
  • Таблицы с большим количеством soft-deleted записей требуют периодической очистки (Article::onlyTrashed()->where('deleted_at', '<', now()->subMonths(6))->forceDelete()), иначе производительность деградирует.
  • Если используете Scout (full-text search), soft-deleted записи по умолчанию остаются в индексе — нужно явно слушать событие deleted и удалять из индекса.

Частые вопросы на собеседовании

  • Как работает система маршрутизации (routing) в Laravel и в чём разница между web и API маршрутами?
  • Что такое migrations в Laravel и как их создавать и запускать?
  • Что такое паттерн MVC и как Laravel его реализует?
  • Что такое Laravel и каковы его ключевые возможности?

Типичные ошибки

  • Сводить soft deletes к названию метода без lifecycle и failure path.
  • Игнорировать модель runtime: Laravel 13 поверх PHP: request проходит через HTTP kernel, middleware, routing, controller/action и response pipeline.
  • Не отделять validation, authorization, transaction boundary и business logic.

Что проверяет интервьюер

  • Объясняет soft deletes через конкретную точку lifecycle в Laravel.
  • Приводит корректный минимальный пример без вымышленных методов или callbacks.
  • Называет edge cases: пустые значения, ошибки, транзакции, безопасность или concurrency.

Как вы знаете этот вопрос?

Проверить себя по теме Laravel →

Источники

  • https://laravel.com/docs/13.x/eloquent
  • https://laravel.com/docs/13.x
←Предыдущий вопросЧто такое service container (IoC container) в Laravel и как работает dependency injection?Следующий вопрос→Представьте, endpoint на Laravel иногда отвечает за секунды вместо миллисекунд. Как вы будете искать причину?

Связанные темы

LaravelBackend-Engineeringlaravel-ecosystem