在Symfony(4)中使用MakerBundle创建新实体(make:entity EntityName
)时,默认情况下会生成带有注释的ID(如果启用了注释)@GeneratedValue
。
@GeneratedValue
的意思是@GeneratedValue(strategy="AUTO")
。
根据Doctrine documentation,AUTO
策略应该在PostgreSQL中使用 SERIAL 类型作为id。但是,我不知道为什么在我的情况下,AUTO
策略使用SEQUENCE作为ID。
然后,我可以通过手动更改为@GeneratedValue(strategy="IDENTITY")
来强制它使用SERIAL,这意味着在PostgreSQL中使用 SERIAL 类型。
是否可以更改MakerBundle创建的默认@GeneratedValue批注,以使用@GeneratedValue(strategy="IDENTITY")
批注创建新实体?
答案 0 :(得分:0)
您可能可以做的是decorate \Symfony\Bundle\MakerBundle\Doctrine\EntityClassGenerator
,它已注册为名为maker.entity_class_generator
in vendor/symfony/maker-bundle/src/Resources/config/services.xml
的服务,并覆盖了其generateEntityClass
方法以对{{1 }}的Generator
方法,特别是可以在此处更改文件路径。
似乎文件路径可能是相对的,也可能是绝对的,因此,通过反复试验,您可以获取所需的注释输出。制造商捆绑包现在使用的模板位于vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Entity.tpl.php
,修改起来非常简单。