Уроки курса
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: Создание таблиц товаров

Студент напишет миграции для создания таблиц базы данных и научится использовать модели Eloquent для удобной работы с записями.

Прогресс урока: 0%
Миграции базы данных. В традиционной разработке изменения структуры базы данных (создание таблиц, добавление колонок) выполняются через SQL-скрипты, что часто приводит к рассинхронизации баз у разных разработчиков в команде. Laravel решает эту проблему с помощью Миграций (Migrations). Миграции — это система контроля версий для вашей базы данных. Каждая миграция представляет собой PHP-класс с двумя методами: up() (выполняется при применении миграции) и down() (выполняется при откате миграции). Для создания миграции таблицы товаров используется команда Artisan: php artisan make:migration create_products_table. В методе up() мы используем фасад Schema и класс Blueprint для определения структуры. Для e-commerce проекта критически важны правильные типы данных: цена товара (price) должна храниться в формате DECIMAL (в Laravel это $table->decimal('price', 8, 2)), а не FLOAT, чтобы избежать ошибок округления при финансовых вычислениях. Также мы настраиваем внешние ключи (foreign keys) с помощью метода constrained()->cascadeOnDelete(), чтобы при удалении категории автоматически удалялись все связанные с ней товары, сохраняя целостность данных.
php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration {
    public function up() {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->foreignId('category_id')->constrained()->cascadeOnDelete();
            $table->string('name');
            $table->text('description')->nullable();
            $table->decimal('price', 8, 2);
            $table->timestamps(); // Создает колонки created_at и updated_at
        });
    }
    public function down() {
        Schema::dropIfExists('products');
    }
};
Введение в Eloquent ORM. Eloquent — это реализация паттерна ActiveRecord в Laravel. Это ORM (Object-Relational Mapping), который позволяет взаимодействовать с таблицами базы данных как с объектами классов (Моделями). Вместо написания сырых SQL-запросов (как мы делали с PDO), мы используем выразительный синтаксис PHP. Каждая таблица БД имеет соответствующую Модель. Таблица 'products' управляется моделью 'Product'. Модели генерируются командой php artisan make:model Product. Eloquent автоматически предполагает, что имя таблицы — это имя класса во множественном числе, а первичный ключ — колонка 'id'. Метод Mastery Learning требует глубокого понимания: Eloquent не заменяет SQL, он абстрагирует его. Под капотом Eloquent все равно использует PDO и подготовленные выражения, гарантируя защиту от SQL-инъекций. Получить все товары можно командой Product::all(). Найти товар по ID — Product::find(1). Для обработки ошибок 404 (Not Found) в контроллерах используется метод Product::findOrFail($id), который автоматически прервет выполнение и вернет страницу 404, если товар не найден в базе.
Действие Чистый SQL (PDO) Eloquent ORM
Получить всё SELECT * FROM products Product::all()
Найти по ID SELECT * FROM products WHERE id = ? Product::find($id)
Добавить запись INSERT INTO products (name) VALUES (?) Product::create(['name' => 'Laptop'])
Фильтрация SELECT * FROM products WHERE price > 100 Product::where('price', '>', 100)->get()
Связи (Relationships) в Eloquent. Реляционные базы данных основаны на связях между таблицами. В нашем интернет-магазине Категория (Category) имеет множество Товаров (Product) — это связь 'один ко многим' (One-To-Many). Eloquent позволяет описывать эти связи прямо в классах моделей в виде методов. В модели Category мы создаем метод products(), который возвращает $this->hasMany(Product::class). В модели Product мы создаем обратную связь: метод category(), возвращающий $this->belongsTo(Category::class). После настройки связей мы получаем доступ к мощнейшему инструменту — динамическим свойствам. Если у нас есть объект товара $product, мы можем получить название его категории просто обратившись к $product->category->name. Eloquent автоматически сгенерирует и выполнит нужный SQL-запрос JOIN за кулисами. Это значительно упрощает код контроллеров и шаблонов Blade, делая его читаемым как обычный английский текст.
php
// App\Models\Category.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Category extends Model {
    public function products() {
        return $this->hasMany(Product::class);
    }
}

// App\Models\Product.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;

class Product extends Model {
    public function category() {
        return $this->belongsTo(Category::class);
    }
}

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

Что представляет собой Eloquent ORM в контексте фреймворка Laravel?