Eloquent ORM — это объектно-ориентированный слой для работы с базой данных в Laravel. Он позволяет описывать SQL-запросы с помощью интуитивного и чистого синтаксиса, что делает код читаемым и легко поддерживаемым, при этом автоматически защищает от SQL-инъекций. ([Medium][1])
📌 Основные возможности Eloquent
- Запросы на чтение, фильтрация, сортировка и пагинация.
- Создание, обновление и удаление записей.
- Отношения между моделями (
hasOne,hasMany,belongsTo,belongsToMany) с автоматической подгрузкой связанных записей. - Агрегатные функции (например,
count,max,sum).
🧠 Примеры SQL-запросов через Eloquent
🔍 Получение данных (SELECT)
User::get(); // SELECT * FROM users
User::first(); // SELECT * FROM users LIMIT 1
User::find(2); // SELECT * FROM users WHERE id = 2 LIMIT 1
User::paginate(); // SELECT ... LIMIT & OFFSET для пагинации
При использовании soft deletes записи с deleted_at автоматически исключаются из выборки, если не указано иначе.
🔎 Фильтрация (WHERE)
User::where('age', '>', 32)->get(); // age > 32
User::whereIn('role', ['admin','editor'])->get(); // role IN (...)
User::whereBetween('age',[20,40])->get(); // BETWEEN
User::whereDate('created_at', now())->get(); // DATE(...)
Методы orWhere, whereNull, whereHas позволяют строить более сложные условия.
➕ Создание (INSERT)
User::create([
'name' => 'Alex',
'email' => 'alex@example.com',
]);
// Создаёт новую запись с автоматическим заполнением created_at/updated_at
Также можно использовать firstOrCreate() — он сначала ищет существующую запись, и только если её нет, создаёт новую.
✏️ Обновление (UPDATE) и удаление (DELETE)
User::where('status','inactive')->update(['active'=>false]);
$user->delete(); // DELETE
User::destroy(1,2,3); // Удаление по ID
Для soft deletes метод delete() просто помечает запись, не удаляя её физически.
🔗 Отношения между моделями
👤 One-to-One
$user->profile; // Получить профиль пользователя
User::with('profile'); // Загрузить пользователя + профиль
📦 One-to-Many
$user->orders; // Все заказы пользователя
User::with('orders'); // Загрузить пользователей с их заказами
🔄 Many-to-Many
$user->roles; // Роли пользователя через pivot таблицу
User::with('roles'); // Получить пользователей с ролями
Eloquent сам формирует соответствующие SQL-JOIN запросы.
📊 Агрегатные функции
User::count(); // SELECT COUNT(*) AS aggregate …
User::max('age'); // SELECT MAX(age) …
User::withCount('posts')->get(); // Кол-во связанных записей
Это упрощает получение статистики без ручного написания SQL.
💡 Советы и лучшие практики
Используйте ORM, когда это удобно
Eloquent отлично подходит для стандартных операций CRUD и отношений, делая код чище и понятнее.
Но помните про производительность
Для очень сложных запросов или больших объёмов данных ORM может уступать производительности «сырым» SQL-запросам или Query Builder, особенно если надо использовать специфичные SQL-функции, сложные подзапросы или аналитические конструкции.
Если столкнулись с узкими местами, можно использовать:
$users = DB::select('SELECT * FROM users WHERE ...');
— прямой SQL (через фасад DB), обходящий ORM, но требующий аккуратного использования параметров для безопасности.
📍 Вывод
🎯 Eloquent ORM — мощный и удобный инструмент для большинства запросов в Laravel. Он позволяет писать выразительный код, легко поддерживать его и безопасно взаимодействовать с базой данных.
⚡ При необходимости оптимизации или очень сложных запросов вы всегда можете комбинировать его с Query Builder или прямым SQL — главное, сохранять читаемость и безопасность кода.