make:entity и doctrine:generate:entities для генерации сущностей в Symfony 3.4

Ещё один момент, по которому Symfony можно считать худшим PHP-фреймворком в плане user-friendly. Симфони содержит несколько консольных команд для автоматизации работы с Entity, которые делают практически одно и тоже: make:entity и doctrine:generate:entities.

Команда make:entity доступна после установки отдельного бандла. Судя из описания нужна для создания и обновления сущностей и классов-репозиториев. Вызов без указания флагов работает для генерации сущностей и репозиториев с ноля на основе yml или других файлов с описаниями. С помощью опции —regenerate можно догенерировать в сущность новые поля из yml файла. Однако, если удалить поля из описания — из сущности эта команда их не удалит! Из других недостатков этой команды — свойства и методы будут сгенерированы без phpdoc комментариев, для кого-то может быть критично.

Команда doctrine:generate:entities помечена как deprecated и вместо неё рекомендуют использовать make:entity —regenerate из бандла MakerBundle. Однако, эта команда генерирует phpdoc комментарии для геттеров, сеттеров и свойств сущностей. Эта команда также не удалит из класса отсутствующие поля.

Ещё один интересный момент, который повергает в шок. Обе команды также генерируеют репозитории для сущностей и кладут их в директорию src/Bundle/Repository. Однако, генерируют они их совершенно по-разному. Команда make:entity создаёт классы как наследников Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository и с конструктором:

public function __construct(RegistryInterface $registry)
    {
        parent::__construct($registry, Invoice::class);
    }

А doctrine:generate:entities генерирует пустые классы с extends \Doctrine\ORM\EntityRepository.

Отсюда ещё одно различие в конфигурации! Репозитории сгенерированные через doctrine:generate:entities сразу же готовы к работе! А репозитории от make:entity нужно дополнительно конфигурировать в серфис-контейнере, например так:

$container->autowire(\Bundle\Repository\Repository::class)->addTag('doctrine.repository_service');