Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Eloquent ORM и модели

Освоение паттерна ActiveRecord в Laravel. Создание моделей для работы с базой данных без написания SQL-запросов. Выполнение CRUD операций (создание, чтение, обновление, удаление).

Прогресс урока: 0%

Eloquent ORM: Объектно-Реляционное Отображение

До сих пор, изучая PHP, мы писали SQL-запросы вручную, используя PDO (например, SELECT * FROM products WHERE price > 100). Laravel предоставляет гораздо более элегантный способ работы с базой данных — Eloquent ORM.

Eloquent реализует архитектурный паттерн Active Record. Это означает, что каждая таблица в вашей базе данных имеет соответствующий класс PHP (Модель), который используется для взаимодействия с этой таблицей. Экземпляр (объект) этой модели представляет собой одну строку в таблице. То есть, вместо работы с массивами сырых данных из БД, вы работаете с полноценными объектами, вызывая их методы.

Чтобы создать модель товара, мы используем команду php artisan make:model Product. По умолчанию Laravel предполагает, что модель Product (в единственном числе, с большой буквы) связана с таблицей products (во множественном числе, с маленькой буквы, в змеином регистре). Вам даже не нужно указывать имя таблицы внутри класса модели, если вы следуете этому соглашению об именовании!

php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    // Свойство $fillable защищает от уязвимости Mass Assignment
    // Здесь мы перечисляем поля, которые разрешено заполнять массово (например, из формы)
    protected $fillable = [
        'category_id',
        'name',
        'description',
        'price'
    ];
}

// --- Примеры использования Eloquent в Контроллере --- //

// 1. Получить все товары
$allProducts = Product::all();

// 2. Найти товар по ID. Если не найден - вернет null
$product = Product::find(1);

// 3. Найти товар по ID. Если не найден - выбросит 404 ошибку (ModelNotFoundException)
$product = Product::findOrFail(1);

// 4. Построитель запросов (Query Builder) в Eloquent
$cheapProducts = Product::where('price', '<', 1000)
                        ->orderBy('name', 'asc')
                        ->get();

Создание, Обновление и Удаление (CUD-операции)

Чтение данных (Read) — это только начало. В административной панели магазина вам потребуется создавать, редактировать и удалять товары. Eloquent делает этот процесс интуитивно понятным.

Для создания новой записи мы используем метод create(), передавая ему ассоциативный массив данных. Важно! Этот метод будет работать только в том случае, если вы определили свойство $fillable в модели (как показано в примере выше). Это защита от уязвимости Mass Assignment (Массовое заполнение). Если злоумышленник подделает HTTP-запрос и добавит поле is_admin => true, Eloquent проигнорирует его, если его нет в массиве $fillable.

Для обновления мы сначала находим нужную модель (например, через findOrFail()), затем вызываем метод update(), передавая новые данные, либо меняем свойства объекта напрямую и вызываем метод save(). Для удаления используется метод delete() на экземпляре модели.

Примечание: При сохранении сложных данных, например, при оформлении заказа, когда нужно одновременно сохранить данные в таблицу orders и в таблицу order_items, необходимо использовать транзакции базы данных (DB::transaction), чтобы гарантировать атомарность операций (либо сохранится всё, либо ничего).

php
// --- Создание (Create) ---
$newProduct = Product::create([
    'category_id' => 1,
    'name' => 'MacBook Pro',
    'description' => 'Мощный ноутбук для разработчиков',
    'price' => 2500.00
]);

// --- Обновление (Update) ---
$productToUpdate = Product::findOrFail(1);
$productToUpdate->update([
    'price' => 2400.00 // Делаем скидку
]);
// Альтернативный способ обновления:
// $productToUpdate->price = 2400.00;
// $productToUpdate->save();

// --- Удаление (Delete) ---
$productToDelete = Product::findOrFail(2);
$productToDelete->delete();

Какая уязвимость предотвращается путем определения свойства $fillable в Eloquent модели?

Какой метод Eloquent следует использовать для поиска записи по первичному ключу, чтобы в случае отсутствия записи автоматически генерировалась ошибка 404 (Not Found)?