Определение стратегии по умолчанию @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 и это довольно просто изменить.

Другие вопросы по тегам