为Symfony MakerBundle定义默认@GeneratedValue策略

时间:2019-02-18 11:51:13

标签: symfony doctrine symfony-4.2

在Symfony(4)中使用MakerBundle创建新实体(make:entity EntityName)时,默认情况下会生成带有注释的ID(如果启用了注释)@GeneratedValue

@GeneratedValue的意思是@GeneratedValue(strategy="AUTO")

根据Doctrine documentationAUTO策略应该在PostgreSQL中使用 SERIAL 类型作为id。但是,我不知道为什么在我的情况下,AUTO策略使用SEQUENCE作为ID。

然后,我可以通过手动更改为@GeneratedValue(strategy="IDENTITY")来强制它使用SERIAL,这意味着在PostgreSQL中使用 SERIAL 类型。

是否可以更改MakerBundle创建的默认@GeneratedValue批注,以使用@GeneratedValue(strategy="IDENTITY")批注创建新实体?

1 个答案:

答案 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,修改起来非常简单。