← Назад к вопросам

Какая ORM в Laravel?

2.0 Middle🔥 171 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

ORM в Laravel: Eloquent

Eloquent — это встроенный объектно-реляционный преобразователь (ORM), поставляемый с фреймворком Laravel. ORM представляет собой технику, которая позволяет взаимодействовать с реляционными базами данных, используя объектно-ориентированный синтаксис, вместо написания сырых SQL-запросов. Eloquent реализует паттерн Active Record, где каждая модель соответствует таблице в базе данных, а экземпляр этой модели представляет собой отдельную строку в таблице.

Ключевые особенности Eloquent

  1. Простота и выразительность синтаксиса Eloquent предоставляет интуитивно понятный и лаконичный API для выполнения операций CRUD (Create, Read, Update, Delete). Например, для получения всех записей из таблицы users достаточно написать:

    $users = User::all();
    

    Для поиска пользователя по идентификатору:

    $user = User::find(1);
    
  2. Связи между моделями (Relationships) Eloquent поддерживает различные типы связей, такие как один к одному, один ко многим, многие ко многим и полиморфные связи. Это позволяет легко работать со связанными данными без написания сложных SQL-запросов. Например, чтобы получить все посты пользователя:

    $posts = User::find(1)->posts;
    
  3. Массовое присвоение (Mass Assignment) Eloquent включает встроенную защиту от массового присвоения уязвимостей через свойство $fillable или $guarded в модели. Это позволяет безопасно создавать или обновлять модели с помощью массива атрибутов:

    class User extends Model
    {
        protected $fillable = ['name', 'email'];
    }
    
  4. Мутаторы и аксессоры (Mutators & Accessors) Они позволяют форматировать атрибуты модели при получении или установке значений. Например, для автоматического хеширования пароля при его установке:

    class User extends Model
    {
        public function setPasswordAttribute($value)
        {
            $this->attributes['password'] = bcrypt($value);
        }
    }
    
  5. Query Builder Eloquent построен на основе Query Builder, что позволяет комбинировать простые ORM-методы с более сложными запросами, включая условия, сортировку, группировку и джойны. Например:

    $activeUsers = User::where('active', 1)
                       ->orderBy('name')
                       ->take(10)
                       ->get();
    
  6. Soft Deletes Eloquent поддерживает "мягкое" удаление записей, когда запись не удаляется физически из базы данных, а помечается как удаленная с помощью специального столбца deleted_at. Это позволяет восстанавливать данные при необходимости.

  7. События моделей (Model Events) Eloquent генерирует события на различных этапах жизненного цикла модели, такие как creating, created, updating, updated. Это позволяет выполнять дополнительные действия, например, логирование или отправку уведомлений.

Пример работы с Eloquent

Рассмотрим простой пример модели Post и операции с ней:

// Создание новой записи
$post = new Post();
$post->title = 'Новый пост';
$post->content = 'Содержание поста';
$post->save();

// Или с использованием массового присвоения
$post = Post::create([
    'title' => 'Новый пост',
    'content' => 'Содержание поста'
]);

// Получение записей с условиями
$posts = Post::where('published', true)
             ->orderBy('created_at', 'desc')
             ->paginate(10);

// Обновление записи
$post = Post::find(1);
$post->title = 'Обновленный заголовок';
$post->save();

// Удаление записи
$post->delete();

Преимущества использования Eloquent

  • Повышение продуктивности: Сокращение времени на написание и отладку SQL-запросов.
  • Безопасность: Встроенные механизмы защиты от SQL-инъекций и массового присвоения.
  • Гибкость: Возможность расширения функционала через трейты, скоупы, касты и другие возможности.
  • Интеграция с Laravel: Полная совместимость с другими компонентами фреймворка, такими как миграции, сиды, фабрики и тестирование.

Альтернативы

Хотя Eloquent является стандартным ORM для Laravel, разработчики могут использовать и другие ORM, такие как Doctrine, но это требует дополнительной настройки и не поддерживается "из коробки".

Таким образом, Eloquent — это мощный и удобный инструмент, который значительно упрощает работу с базами данных в Laravel, делая код более чистым, безопасным и поддерживаемым.

Какая ORM в Laravel? | PrepBro