Лабораторная работа V. Doctrine ORM, сущности, связи, миграции и запросы

Doctrine ORM, безопасность и сервисная архитектура

Лабораторная работа 5. Doctrine ORM, сущности, связи, миграции и запросы

Аудиторная работа: 3 ак. ч.
Самостоятельная работа: 4 ак. ч.

Цель: реализовать доменную модель BizFlow в Doctrine ORM.

Doctrine ORM предоставляет отображение PHP-объектов в реляционную БД, associations, DQL, QueryBuilder, транзакции и инструменты командной строки. [16]

Задание

  1. Настройте подключение Symfony к MySQL.

  2. Создайте сущности:

Customer
Product
SalesOrder
OrderItem

  1. Customer:

id
name
email
phone
company
createdAt

  1. Product:

id
name
sku
costCents
priceCents
active
createdAt

  1. SalesOrder:

id
customer
status
createdAt
updatedAt

  1. OrderItem:

id
order
product
quantity
unitPriceCents

  1. Настройте связи:

Customer 1:N SalesOrder
SalesOrder 1:N OrderItem
Product 1:N OrderItem

  1. Для email создать уникальное ограничение.

  2. Для sku создать уникальное ограничение.

  3. Создайте миграцию:

php bin/console make:migration

  1. Выполните:

php bin/console doctrine:migrations:migrate

  1. Проверьте:

php bin/console doctrine:schema:validate

  1. Создайте тестовые данные:

не менее 20 клиентов;
не менее 30 товаров;
не менее 50 заказов;
не менее 100 позиций заказов.

  1. Данные должны создаваться автоматически и воспроизводимо.

  2. Создайте методы репозиториев:

CustomerRepository::findActiveCustomers()
CustomerRepository::findTopByRevenue()

SalesOrderRepository::findByPeriod()
SalesOrderRepository::findByCustomer()
SalesOrderRepository::findByStatus()

ProductRepository::findTopSellingProducts()

  1. Реализуйте запросы через:

QueryBuilder

  1. Хотя бы один запрос реализуйте через DQL.

  2. Реализуйте страницу:

/dashboard

  1. Выведите:

количество клиентов;
количество заказов;
выручку;
среднюю сумму заказа;
пять крупнейших клиентов;
пять наиболее продаваемых товаров.

  1. Реализуйте страницу клиента со списком его заказов.

  2. Не выполняйте SQL из Twig.

  3. Не передавайте EntityManager непосредственно в шаблон.

  4. Добавьте pagination для списка заказов.

  5. Добавьте минимум:

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]

Автор: к.п.н., Румянцев Сергей Александрович, доцент Финансового университета при Правительстве РФ; доцент ОЧУВО Международного инновационного университета; Консалтинг, управление разработкой ПО; системный и бизнес анализ; менеджмент; аналитиз данных; управление ИТ. Телефон для связи +79269444818 (мессенджеры)   Короткая ссылка:

Doctrine ORM, безопасность и сервисная архитектура

Лабораторная работа 5. Doctrine ORM, сущности, связи, миграции и запросы

Аудиторная работа: 3 ак. ч.
Самостоятельная работа: 4 ак. ч.

Цель: реализовать доменную модель BizFlow в Doctrine ORM.

Doctrine ORM предоставляет отображение PHP-объектов в реляционную БД, associations, DQL, QueryBuilder, транзакции и инструменты командной строки. [16]

Задание

  1. Настройте подключение Symfony к MySQL.

  2. Создайте сущности:

Customer
Product
SalesOrder
OrderItem

  1. Customer:

id
name
email
phone
company
createdAt

  1. Product:

id
name
sku
costCents
priceCents
active
createdAt

  1. SalesOrder:

id
customer
status
createdAt
updatedAt

  1. OrderItem:

id
order
product
quantity
unitPriceCents

  1. Настройте связи:

Customer 1:N SalesOrder
SalesOrder 1:N OrderItem
Product 1:N OrderItem

  1. Для email создать уникальное ограничение.

  2. Для sku создать уникальное ограничение.

  3. Создайте миграцию:

php bin/console make:migration

  1. Выполните:

php bin/console doctrine:migrations:migrate

  1. Проверьте:

php bin/console doctrine:schema:validate

  1. Создайте тестовые данные:

не менее 20 клиентов;
не менее 30 товаров;
не менее 50 заказов;
не менее 100 позиций заказов.

  1. Данные должны создаваться автоматически и воспроизводимо.

  2. Создайте методы репозиториев:

CustomerRepository::findActiveCustomers()
CustomerRepository::findTopByRevenue()

SalesOrderRepository::findByPeriod()
SalesOrderRepository::findByCustomer()
SalesOrderRepository::findByStatus()

ProductRepository::findTopSellingProducts()

  1. Реализуйте запросы через:

QueryBuilder

  1. Хотя бы один запрос реализуйте через DQL.

  2. Реализуйте страницу:

/dashboard

  1. Выведите:

количество клиентов;
количество заказов;
выручку;
среднюю сумму заказа;
пять крупнейших клиентов;
пять наиболее продаваемых товаров.

  1. Реализуйте страницу клиента со списком его заказов.

  2. Не выполняйте SQL из Twig.

  3. Не передавайте EntityManager непосредственно в шаблон.

  4. Добавьте pagination для списка заказов.

  5. Добавьте минимум:

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]

https://webprogr.ru/~WoTlo
Короткая ссылка на новость:https://webprogr.ru/~WoTlo


Последние новости

Лабораторная работа V. Doctrine ORM, сущности, связи, миграции и запросы

Doctrine ORM, безопасность и сервисная архитектура

Лабораторная работа 5. Doctrine ORM, сущности, связи, миграции и запросы

Аудиторная работа: 3 ак. ч.
Самостоятельная работа: 4 ак. ч.

Цель: реализовать доменную модель BizFlow в Doctrine ORM.

Doctrine ORM предоставляет отображение PHP-объектов в реляционную БД, associations, DQL, QueryBuilder, транзакции и инструменты командной строки. [16]

Задание

  1. Настройте подключение Symfony к MySQL.

  2. Создайте сущности:

Customer
Product
SalesOrder
OrderItem

  1. Customer:

id
name
email
phone
company
createdAt

  1. Product:

id
name
sku
costCents
priceCents
active
createdAt

  1. SalesOrder:

id
customer
status
createdAt
updatedAt

  1. OrderItem:

id
order
product
quantity
unitPriceCents

  1. Настройте связи:

Customer 1:N SalesOrder
SalesOrder 1:N OrderItem
Product 1:N OrderItem

  1. Для email создать уникальное ограничение.

  2. Для sku создать уникальное ограничение.

  3. Создайте миграцию:

php bin/console make:migration

  1. Выполните:

php bin/console doctrine:migrations:migrate

  1. Проверьте:

php bin/console doctrine:schema:validate

  1. Создайте тестовые данные:

не менее 20 клиентов;
не менее 30 товаров;
не менее 50 заказов;
не менее 100 позиций заказов.

  1. Данные должны создаваться автоматически и воспроизводимо.

  2. Создайте методы репозиториев:

CustomerRepository::findActiveCustomers()
CustomerRepository::findTopByRevenue()

SalesOrderRepository::findByPeriod()
SalesOrderRepository::findByCustomer()
SalesOrderRepository::findByStatus()

ProductRepository::findTopSellingProducts()

  1. Реализуйте запросы через:

QueryBuilder

  1. Хотя бы один запрос реализуйте через DQL.

  2. Реализуйте страницу:

/dashboard

  1. Выведите:

количество клиентов;
количество заказов;
выручку;
среднюю сумму заказа;
пять крупнейших клиентов;
пять наиболее продаваемых товаров.

  1. Реализуйте страницу клиента со списком его заказов.

  2. Не выполняйте SQL из Twig.

  3. Не передавайте EntityManager непосредственно в шаблон.

  4. Добавьте pagination для списка заказов.

  5. Добавьте минимум:

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]

Рейтинг@Mail.ru