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

+666новых вакансий за сутки·52 265вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python5 973
  • Облачные технологии4 523
  • QA вакансии1 689
  • Android1 143
  • Инженер данных788
  • Продакт-менеджер308

Разработка

  • iOS1 093
  • Backend вакансии1 020
  • Fullstack вакансии448
  • AI вакансии378
  • Frontend вакансии369
  • Mobile вакансии27

По стеку

  • Go3 345
  • Java2 037
  • Kotlin908
  • Node.js746
  • Rust492
  • .NET481
  • PHP278
  • C++213
  • C#199

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

  • Kubernetes2 562
  • Linux-инфраструктура2 030
  • DevOps вакансии1 855
  • Terraform / IaC1 548
  • CI/CD876
  • Мониторинг и Observability709
  • SRE229
  • Кибербезопасность40

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

  • Аналитик данных479
  • Data Scientist443
  • Бизнес-аналитик342
  • Системный аналитик50

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

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

По регионам

  • Вакансии в США24 039
  • Вакансии в Европе9 373
  • Работа в России2 968
  • Вакансии в Канаде2 114

По формату

  • Удалённые вакансии41 595
  • Релокация в США24 039
  • Гибридная работа5 209
  • Офисная работа3 834

По уровню

  • Senior вакансии22 591
  • Middle вакансии12 174
  • Junior вакансии4 013

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

Все компании
  • Rakuten189 вакансий
  • ASML163 вакансии
  • Grab134 вакансии
  • Wise81 вакансия
  • Infobip28 вакансий
  • Darktrace17 вакансий
  • Spotify17 вакансий
  • Celonis14 вакансий
  • UiPath13 вакансий
  • Adyen9 вакансий

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

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

Что такое Eloquent ORM и как он взаимодействует с базой данных?

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

Eloquent ORM реализует паттерн Active Record: каждая модель соответствует таблице, экземпляр — строке. CRUD-операции выполняются через fluent-методы (find, create, save, delete), связи — через belongsTo/hasMany/belongsToMany.

Базовая модель и соглашения

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    // По умолчанию: таблица 'posts', PK 'id', timestamps created_at/updated_at
    protected $table = 'posts';      // явное имя таблицы
    protected $primaryKey = 'id';    // PK (default)
    public $timestamps = true;        // автоматические created_at/updated_at

    // Белый список для mass assignment
    protected $fillable = ['title', 'body', 'user_id'];

    // Или чёрный список:
    protected $guarded = ['is_admin'];

    // Автоматическое приведение типов
    protected $casts = [
        'published_at' => 'datetime',
        'settings'     => 'array',
        'is_featured'  => 'boolean',
    ];
}

Eloquent ORM

Eloquent — реализация паттерна Active Record в Laravel. Каждый класс модели соответствует таблице в базе данных; экземпляр модели представляет одну строку. Eloquent использует PDO через Illuminate\Database\Connection и строит SQL через fluent Query Builder.

CRUD-операции

// Create
$post = Post::create(['title' => 'Hello', 'body' => 'World', 'user_id' => 1]);
// или
$post = new Post(['title' => 'Hello']);
$post->user_id = auth()->id();
$post->save();

// Read
$post = Post::find(1);                    // null если не найдено
$post = Post::findOrFail(1);              // выбрасывает ModelNotFoundException
$posts = Post::where('is_published', true)->orderBy('created_at', 'desc')->get();
$count = Post::where('user_id', 1)->count();

// Update
$post->update(['title' => 'Updated']);
// или
$post->title = 'Updated';
$post->save();

// Delete
$post->delete();
Post::destroy([1, 2, 3]);  // удалить несколько по ID

Связи (Relationships)

class Post extends Model
{
    // Пост принадлежит пользователю (FK: user_id в таблице posts)
    public function author(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    // Пост имеет много комментариев (FK: post_id в таблице comments)
    public function comments(): HasMany
    {
        return $this->hasMany(Comment::class);
    }

    // Теги через pivot-таблицу post_tag
    public function tags(): BelongsToMany
    {
        return $this->belongsToMany(Tag::class)->withTimestamps();
    }
}

// Использование
$post->author->name;           // ленивая загрузка
$post->comments()->count();    // запрос через query builder
$post->tags()->attach([1, 3]); // добавить теги через pivot

Scopes для переиспользуемых фильтров

class Post extends Model
{
    // Local scope
    public function scopePublished(Builder $query): Builder
    {
        return $query->where('published_at', '<=', now());
    }

    public function scopeByAuthor(Builder $query, int $userId): Builder
    {
        return $query->where('user_id', $userId);
    }
}

// Использование
$posts = Post::published()->byAuthor(1)->latest()->paginate(20);

Soft Deletes

use Illuminate\Database\Eloquent\SoftDeletes;

class Post extends Model
{
    use SoftDeletes; // добавляет поле deleted_at
}

$post->delete();           // устанавливает deleted_at, не удаляет строку
$post->restore();          // сбрасывает deleted_at
Post::withTrashed()->get(); // включает soft-deleted записи
Post::onlyTrashed()->get(); // только удалённые

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

  • Mass assignment без $fillable или $guarded открывает уязвимость: злоумышленник может передать is_admin=1 в POST-запросе и Eloquent сохранит его.
  • Метод all() загружает все строки таблицы в память — на больших таблицах это приводит к OOM; используйте chunk(), lazy() или cursor().
  • Динамические свойства ($post->author) триггерят lazy loading — первое обращение в цикле на коллекции порождает N+1 запросов.
  • $model->update([]) с пустым массивом возвращает true, но ничего не обновляет; метод не выбрасывает исключение при пустом fillable.
  • Soft Deletes не удаляют связанные записи автоматически — каскадный soft delete нужно реализовывать вручную через observer или события модели.
  • Приведение 'settings' => 'array' сериализует в JSON при сохранении, но при чтении возвращает PHP-массив; изменение вложенного элемента без переприсвоения всего поля не триггерит isDirty().
  • Глобальные scopes (например, SoftDeletes) применяются ко всем запросам — при join с той же таблицей через alias это ломает запрос, нужно явно вызывать withoutGlobalScope().

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

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

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

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

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

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

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

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

Источники

  • https://laravel.com/docs/13.x/eloquent
  • https://laravel.com/docs/13.x
←Предыдущий вопросВ чём разница между связями `hasOne`, `hasMany`, `belongsTo` и `belongsToMany`?Следующий вопрос→Как писать unit-тесты и feature-тесты в Laravel?

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

LaravelBackend-Engineeringdatabase-modelinglaravel-ecosystemtransaction-design