Понимая Doctrine
Так вышло, что документация Doctrine в некоторых местах не является достаточно детальной, поэтому было решено рассмотреть основные ситуации в файле tests/Functional/OurTest.php
Напоминаю про:
- https://ocramius.github.io/doctrine-best-practices/
- тесты в официальном репозитории https://github.com/doctrine/orm/tree/2.9.x/tests/Doctrine/Tests/ORM/Functional
- https://buildmedia.readthedocs.org/media/pdf/doctrine2/stable/doctrine2.pdf
По правде я разочарован большим количеством неочевидных моментов и простых багов (учитывая кол-во лет разработки 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' и смотрите в лог.
- https://xdebug.org/docs/upgrade_guide
- https://www.jetbrains.com/help/phpstorm/2021.1/debugging-a-php-cli-script.html
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
Содержание
- Введение
- Архитектура
- Настройка
- Часто задаваемые вопросы
- Отображения
- Отображения связей
- Отображения и наследование
- Работа с объектами
- Работа со связями
- Транзакции и параллелизм
- События
- Пакетная обработка
- Язык DQL
- QueryBuilder
- Нативный SQL
- Отслеживание изменений
- Неполные объекты
- Отображения через XML
- Отображения через YAML
- Справочник по аннотациям
- PHP отображения
- Кеширование
- Производительность
- Инструменты
- Драйверы метаданных
- Полезные советы
- Ограничения и известные проблемы
Работа не завершена, аналогичная документация: https://github.com/kaurov/doctrine2-ru/wiki
Copyrights © YaPro.Ru