В 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