Symfony中Doctrine新建实体时设置$id为UUID而非整数的方法
Symfony 5.3 配置 make:entity 默认生成 UUID 主键的方法
前置依赖
首先确保你已安装Symfony UID组件,未安装可执行以下命令:
composer require symfony/uid
方法1:修改生成模板(一劳永逸,所有新实体默认使用UUID主键)
- 第一步:导出MakerBundle的默认生成模板
执行命令将MakerBundle的所有模板导出到项目本地目录,方便自定义修改:
php bin/console maker:dump-templates
执行完成后,模板会生成在项目的templates/bundles/MakerBundle/目录下。
- 第二步:修改实体类生成模板
找到templates/bundles/MakerBundle/Entity/class.tpl.php文件,修改两处内容:
- 在文件头部的use声明区域,添加UUID生成器的导入语句:
use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
- 找到模板中默认生成整数主键的代码段:
/** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id;
将其替换为你需要的UUID主键格式:
/** * @ORM\Id * @ORM\Column(type="uuid", unique=true) * @ORM\GeneratedValue(strategy="CUSTOM") * @ORM\CustomIdGenerator(class=UuidGenerator::class) */ private $id;
配置完成后,后续执行bin/console make:entity创建的所有新实体,都会默认生成UUID格式的主键。
方法2:手动调整单个实体(无需修改全局配置)
如果仅需要部分实体使用UUID主键,不需要全局修改,创建实体时跳过默认的id生成,手动添加id字段即可:
- 执行
make:entity时,当向导询问是否添加id字段,选择否 - 手动新增id字段,类型选择
uuid,设置为唯一、主键,生成策略选择自定义,指定生成器类为Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator
注意事项
- 低于8.0版本的MySQL不支持原生UUID类型,Doctrine会自动将
type="uuid"映射为binary(16)类型存储,不影响正常使用 - 如果你使用PHP 8+的属性注解代替注释注解,对应修改模板中的注解格式即可
内容的提问来源于stack exchange,提问作者Tomáš Skočdopole
相关产品推荐
相关产品推荐

