Doctrine ORM, безопасность и сервисная архитектура
Лабораторная работа 5. Doctrine ORM, сущности, связи, миграции и запросы
Аудиторная работа: 3 ак. ч.
Самостоятельная работа: 4 ак. ч.
Цель: реализовать доменную модель BizFlow в Doctrine ORM.
Doctrine ORM предоставляет отображение PHP-объектов в реляционную БД, associations, DQL, QueryBuilder, транзакции и инструменты командной строки. [16]
Задание
-
Настройте подключение Symfony к MySQL.
-
Создайте сущности:
Customer
Product
SalesOrder
OrderItem
-
Customer:
id
name
email
phone
company
createdAt
-
Product:
id
name
sku
costCents
priceCents
active
createdAt
-
SalesOrder:
id
customer
status
createdAt
updatedAt
-
OrderItem:
id
order
product
quantity
unitPriceCents
-
Настройте связи:
Customer 1:N SalesOrder
SalesOrder 1:N OrderItem
Product 1:N OrderItem
-
Для email создать уникальное ограничение.
-
Для sku создать уникальное ограничение.
-
Создайте миграцию:
php bin/console make:migration
-
Выполните:
php bin/console doctrine:migrations:migrate
-
Проверьте:
php bin/console doctrine:schema:validate
-
Создайте тестовые данные:
не менее 20 клиентов;
не менее 30 товаров;
не менее 50 заказов;
не менее 100 позиций заказов.
-
Данные должны создаваться автоматически и воспроизводимо.
-
Создайте методы репозиториев:
CustomerRepository::findActiveCustomers()
CustomerRepository::findTopByRevenue()
SalesOrderRepository::findByPeriod()
SalesOrderRepository::findByCustomer()
SalesOrderRepository::findByStatus()
ProductRepository::findTopSellingProducts()
-
Реализуйте запросы через:
QueryBuilder
-
Хотя бы один запрос реализуйте через DQL.
-
Реализуйте страницу:
/dashboard
-
Выведите:
количество клиентов;
количество заказов;
выручку;
среднюю сумму заказа;
пять крупнейших клиентов;
пять наиболее продаваемых товаров.
-
Реализуйте страницу клиента со списком его заказов.
-
Не выполняйте SQL из Twig.
-
Не передавайте EntityManager непосредственно в шаблон.
-
Добавьте pagination для списка заказов.
-
Добавьте минимум:
5 unit/integration tests
5 functional tests
Обязательный запрос ИИ-агенту БД
Ты — senior Symfony/Doctrine architect.
Проанализируй сущности:
Customer
Product
SalesOrder
OrderItem.
Проверь:
кардинальности;
owning/inverse side;
cascade;
orphanRemoval;
индексы;
unique constraints;
nullable;
тип денежных полей.
Особенно проверь, не приведет ли выбранная модель к:
N+1;
случайному удалению связанных объектов;
потере истории цены товара в заказе.
Предложи исправления до создания миграции.
Обязательный запрос ИИ-агенту производительности
Проанализируй Doctrine-запросы dashboard.
Ищи:
N+1;
лишнюю hydration сущностей;
запросы внутри циклов;
неиспользуемые JOIN;
отсутствующие индексы.
Предложи QueryBuilder/DQL для:
выручки;
среднего заказа;
top customers;
top products.
Не используй native SQL без необходимости.
Самопроверка
php bin/console doctrine:schema:validate
php bin/console doctrine:migrations:status
php bin/phpunit
Критерии приемки
[ ] реализованы четыре сущности
[ ] связи корректны
[ ] миграции выполняются
[ ] schema validate проходит
[ ] тестовые данные создаются автоматически
[ ] реализованы QueryBuilder-запросы
[ ] имеется DQL
[ ] dashboard рассчитывается из БД
[ ] тесты проходят
[ ] имеется AI log
Doctrine ORM официально документирует entities, associations, QueryBuilder, DQL, транзакции, CLI и оптимизацию производительности. [16]
