0

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

@GeneratedValue意味着@GeneratedValue(strategy="AUTO")

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

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

有什么方法可以更改 MakerBundle 为要使用该注释创建的新实体创建的默认 @GeneratedValue@GeneratedValue(strategy="IDENTITY")注释?

4

1 回答 1

0

您可以做的是装饰 \Symfony\Bundle\MakerBundle\Doctrine\EntityClassGenerator注册为名为maker.entity_class_generatorinvendor/symfony/maker-bundle/src/Resources/config/services.xml的服务并覆盖其generateEntityClass方法以对Generator'sgenerateClass方法进行不同的调用,特别是可以在那里更改文件路径。

似乎文件路径可能是相对的或绝对的,因此通过一些试验和错误,您可以让它输出您想要的注释。maker bundle 现在使用的模板位于vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Entity.tpl.php,修改起来非常简单。

于 2019-02-18T14:18:35.047 回答