当在Symfony(4)中使用MakerBundle创建新实体(make:entity EntityName
)时,默认情况下会生成一个带注释(如果启用了注释)@GeneratedValue
的id。
@GeneratedValue
意味着@GeneratedValue(strategy="AUTO")
。
根据Doctrine documentation,AUTO
策略应该使用SERIAL类型作为PostgreSQL中的id。但是,我不知道为什么在我的情况下,AUTO
策略使用SEQUENCE作为id。
然后,我可以强制它使用SERIAL通过手动更改为@GeneratedValue(strategy="IDENTITY")
,这意味着在PostgreSQL中使用SERIAL类型。
有没有办法更改MakerBundle为使用@GeneratedValue(strategy="IDENTITY")
注释创建的新实体创建的默认@GeneratedValue注释?
您可能做的是decorate \Symfony\Bundle\MakerBundle\Doctrine\EntityClassGenerator
,它注册为名为maker.entity_class_generator
in vendor/symfony/maker-bundle/src/Resources/config/services.xml
的服务,并覆盖其generateEntityClass
方法,以对Generator
的generateClass
方法进行不同的调用,特别是文件路径可以在那里更改。
看起来像文件路径可能是相对的或绝对的,所以通过一些试验和错误,你可以得到它输出你想要的注释。制作工具包现在使用的模板位于vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Entity.tpl.php
,修改非常简单。