yapro / doctrine-understanding

Понимая Doctrine - см. тесты + перевод документации

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Понимая Doctrine

Так вышло, что документация Doctrine в некоторых местах не является достаточно детальной, поэтому было решено рассмотреть основные ситуации в файле tests/Functional/OurTest.php

lib tests

Напоминаю про:

По правде я разочарован большим количеством неочевидных моментов и простых багов (учитывая кол-во лет разработки ORM).

Что делает doctrine при аннотации cascade={"remove"} и аннотации orphanRemoval:

cascade={"remove"} orphanRemoval дочерние будут удалены
указано false да
указано true да
не указано true нет
не указано false нет

При использовании cascade={"remove"}:

  • у нас остается возможность использовать события preRemove / postRemove для дочерней сущности (а надо ли)
  • если мы будем писать SQL-миграцию на UPDATE/DELETE основных сущностей, то бд отклонит данные операции ведь дочерние сущности ожидают наличия основных сущностей, таким образом нам не нужно: @ORM\JoinColumn(onDelete="CASCADE")

Проблема утечки памяти

Решается флагом: --no-debug

Как запустить тесты или поправить их

Предисловие: в репозитории имеется файл composer.lock.dist, необходимый, чтобы понимать, когда и при каких версиях зависимостей текущие тесты успешно проходят, но Вы можете запускать их на основании своего composer.lock файла, это позволит выявлять расхождения в версиях библиотеки Doctrine.

Build

docker build -t yapro/doctrine-understanding:latest -f ./Dockerfile ./

Tests

docker run --rm --user=1000:1000 -v $(pwd):/app yapro/doctrine-understanding:latest bash -c "cd /app \
  && composer install --optimize-autoloader --no-scripts --no-interaction \
  && vendor/bin/phpunit --testsuite=Functional"

Dev

docker run -it --rm --user=1000:1000 --add-host=host.docker.internal:host-gateway -v $(pwd):/app -w /app yapro/doctrine-understanding:latest bash
composer install -o

Debug PHP:

PHP_IDE_CONFIG="serverName=common" \
XDEBUG_SESSION=common \
XDEBUG_MODE=debug \
XDEBUG_CONFIG="max_nesting_level=200 client_port=9003 client_host=host.docker.internal" \
vendor/bin/phpunit  --cache-result-file=/tmp/phpunit.cache -v --stderr --stop-on-incomplete --stop-on-defect \
--stop-on-failure --stop-on-warning --fail-on-warning --stop-on-risky --fail-on-risky --testsuite=Functional

Если с xdebug что-то не получается, напишите: php -dxdebug.log='/tmp/xdebug.log' и смотрите в лог.

Cs-Fixer: fix code

docker run --user=1000:1000 --rm -v $(pwd):/app -w /app yapro/doctrine-understanding:latest ./php-cs-fixer.phar fix --config=.php-cs-fixer.dist.php -v --using-cache=no --allow-risky=yes

PhpMd: update rules

docker run --user=1000:1000 --rm -v $(pwd):/app -w /app yapro/doctrine-understanding:latest ./phpmd.phar . text phpmd.xml --exclude .github/workflows,vendor --strict --generate-baseline

Doctrine docs

Примечания переводчика

Содержание

  1. Введение
  2. Архитектура
  3. Настройка
  4. Часто задаваемые вопросы
  5. Отображения
  6. Отображения связей
  7. Отображения и наследование
  8. Работа с объектами
  9. Работа со связями
  10. Транзакции и параллелизм
  11. События
  12. Пакетная обработка
  13. Язык DQL
  14. QueryBuilder
  15. Нативный SQL
  16. Отслеживание изменений
  17. Неполные объекты
  18. Отображения через XML
  19. Отображения через YAML
  20. Справочник по аннотациям
  21. PHP отображения
  22. Кеширование
  23. Производительность
  24. Инструменты
  25. Драйверы метаданных
  26. Полезные советы
  27. Ограничения и известные проблемы

Работа не завершена, аналогичная документация: https://github.com/kaurov/doctrine2-ru/wiki

Copyrights © YaPro.Ru

About

Понимая Doctrine - см. тесты + перевод документации


Languages

Language:PHP 98.4%Language:Dockerfile 1.6%