Определение стратегии по умолчанию @GeneratedValue для Symfony MakerBundle
При использовании MakerBundle в Symfony (4) для создания новой сущности (make:entity EntityName
) по умолчанию создается идентификатор с аннотацией (если аннотации включены) @GeneratedValue
,
@GeneratedValue
средства @GeneratedValue(strategy="AUTO")
,
Согласно документации Доктрины, AUTO
Стратегия должна использовать тип SERIAL для идентификатора в PostgreSQL. Но я не знаю, почему в моем случае AUTO
Стратегия использования SEQUENCE для идентификатора.
Затем я могу заставить его использовать SERIAL, изменив вручную в @GeneratedValue(strategy="IDENTITY")
что означает использование типа SERIAL в PostgreSQL.
Есть ли способ изменить аннотацию @GeneratedValue по умолчанию, созданную MakerBundle, для новых сущностей, создаваемых с помощью @GeneratedValue(strategy="IDENTITY")
аннотация?
1 ответ
Что вы могли бы сделать, это украсить \Symfony\Bundle\MakerBundle\Doctrine\EntityClassGenerator
который зарегистрирован как сервис с именем maker.entity_class_generator
в vendor/symfony/maker-bundle/src/Resources/config/services.xml
и переопределить его generateEntityClass
метод сделать другой вызов на Generator
"s generateClass
метод, в частности, путь к файлу может быть изменен там.
Похоже, что путь к файлу может быть относительным или абсолютным, поэтому, используя метод проб и ошибок, вы можете получить желаемую аннотацию. Шаблон, который использует комплект производителя, находится по адресу vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Entity.tpl.php
и это довольно просто изменить.