В 6-ом уроке мы погрузимся в одну из самых мощных возможностей Laravel, это Eloquent ORM. Если вы хотите работать с базами данных как с обычными объектами, избегая сложных SQL-запросов, то этот урок станет вашим лучшим другом. Мы разберем создание моделей, базовые методы Eloquent, массовое присваивание и CRUD-операции. Всё это будет с примерами кода и задачами для закрепления.
Что такое Eloquent ORM?
Eloquent это объектно-реляционное отображение (ORM), встроенное в Laravel. Оно позволяет взаимодействовать с таблицами базы данных как с объектами и классами. Вместо написания сырых SQL-запросов вы работаете с моделями, которые автоматически связываются с таблицами. Например, модель Post будет связана с таблицей posts, а её свойства с колонками таблицы.
Главные преимущества Eloquent:
- Чистый и читаемый код.
- Автоматизация рутинных операций.
- Безопасность (избегаем SQL-инъекций).
Создание модели и работа с таблицей
По соглашению Eloquent, имя модели в единственном числе (например, User), а таблица во множественном (users). Если ваша таблица называется иначе, вы можете указать это в модели.
Создадим модель через Artisan:
php artisan make:model Post
Эта команда создаст файл app/Models/Post.php (или app/Post.php в старых версиях Laravel). Если нужно создать миграцию вместе с моделью, добавьте флаг -m:
php artisan make:model Post -m
Пример модели Post:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Post extends Model { // Если таблица называется не "posts", укажите это: protected $table = 'my_posts'; // Поля для массового присваивания (об этом позже) protected $fillable = ['title', 'content']; }
Методы all(), find(), where(), first()
Eloquent предоставляет десятки методов для выборки данных. Начнем с базовых.
1. all() получить все записи
use App\Models\Post; // Получить все посты из таблицы $posts = Post::all(); foreach ($posts as $post) { echo $post->title; }
2. find() найти запись по ID
// Найти пост с ID = 1 $post = Post::find(1); echo $post->title;
3. where() фильтрация по условию
// Получить все посты, где автор_id = 5 $posts = Post::where('author_id', 5)->get(); // Комбинируем условия $posts = Post::where('views', '>', 100) ->where('status', 'published') ->get();
4. first() получить первую запись, соответствующую условию
// Первый опубликованный пост $post = Post::where('status', 'published')->first(); echo $post->title;
Массовое присваивание и $fillable
Массовое присваивание (mass assignment) это заполнение полей модели массивами данных. Например, при создании поста из данных формы:
Post::create([ 'title' => 'Новый пост', 'content' => 'Текст...', 'author_id' => 1 ]);
Но здесь есть опасность: злоумышленник может передать лишние поля (например, is_admin), если они есть в таблице. Чтобы этого избежать, используйте свойство $fillable в модели, которое указывает, какие поля можно заполнять массово.
Пример:
class Post extends Model { protected $fillable = ['title', 'content', 'author_id']; }
Если вы доверяете всем полям, можно разрешить массовое присваивание для всех:
protected $guarded = []; // Не рекомендуется для полей вроде is_admin!
Сохранение, обновление и удаление записей
1. Сохранение новой записи
Способ 1: Через метод create()
Post::create([ 'title' => 'Заголовок', 'content' => 'Текст...' ]);
Способ 2: Через создание объекта и save()
$post = new Post(); $post->title = 'Заголовок'; $post->content = 'Текст...'; $post->save(); // Запись сохранится в БД
2. Обновление записи
Способ 1: Через метод update()
$post = Post::find(1); $post->update(['title' => 'Новый заголовок']);
Способ 2: Изменение свойств и вызов save()
$post = Post::find(1); $post->title = 'Новый заголовок'; $post->save();
3. Удаление записи
Способ 1: Через метод delete()
$post = Post::find(1); $post->delete();
Способ 2: Через статический метод destroy()
Post::destroy(1); // Удалить пост с ID=1 Post::destroy([1, 2, 3]); // Удалить несколько записей
Практические задачи
Закрепим знания на примерах!
Задача 1: Создание модели и миграции
- Создайте модель
Categoryс миграцией. - В миграции добавьте колонки:
name(string),description(text). - Запустите миграцию:
php artisan migrate.
Решение:
php artisan make:model Category -m
В файле миграции:
public function up() { Schema::create('categories', function (Blueprint $table) { $table->id(); $table->string('name'); $table->text('description'); $table->timestamps(); }); }
Задача 2: Работа с методами Eloquent
- Создайте 3 категории через метод
create(). - Найдите категорию с ID=2 и измените её описание.
- Удалите категорию с ID=3.
Решение:
// Создание Category::create(['name' => 'PHP', 'description' => 'Статьи о PHP']); Category::create(['name' => 'Laravel', 'description' => 'Laravel-материалы']); Category::create(['name' => 'JavaScript', 'description' => 'JS-туториалы']); // Обновление $category = Category::find(2); $category->update(['description' => 'Фреймворк Laravel']); // Удаление Category::destroy(3);
Задача 3: Использование where() и first()
Найдите первую категорию, имя которой начинается на «Lara» и выведите её описание.
Решение:
$category = Category::where('name', 'like', 'Lara%')->first(); echo $category->description; // "Фреймворк Laravel"
Итоги шестого урока по Laravel
Вы освоили основы Eloquent ORM. Теперь вы можете:
- Создавать модели и связывать их с таблицами.
- Использовать методы
all(),find(),where(),first(). - Работать с массовым присваиванием через
$fillable. - Выполнять CRUD-операции (создание, чтение, обновление, удаление).
Пишите меньше кода, делайте больше. Laravel заботится о вашей производительности.
Полный курс по Laravel для начинающих: https://max-gabov.ru/laravel-dlya-nachinaushih
Поддержка автора осуществляется с помощью специальной формы ниже, предоставленной сервисом «ЮMoney». Все платёжные операции выполняются на защищённой странице сервиса, что обеспечивает их корректность и полную безопасность.


