You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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文件,修改两处内容:
  1. 在文件头部的use声明区域,添加UUID生成器的导入语句:
use Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator;
  1. 找到模板中默认生成整数主键的代码段:
/**
 * @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字段即可:

  1. 执行make:entity时,当向导询问是否添加id字段,选择否
  2. 手动新增id字段,类型选择uuid,设置为唯一、主键,生成策略选择自定义,指定生成器类为Symfony\Bridge\Doctrine\IdGenerator\UuidGenerator

注意事项

  • 低于8.0版本的MySQL不支持原生UUID类型,Doctrine会自动将type="uuid"映射为binary(16)类型存储,不影响正常使用
  • 如果你使用PHP 8+的属性注解代替注释注解,对应修改模板中的注解格式即可

内容的提问来源于stack exchange,提问作者Tomáš Skočdopole

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:45:02