doctrine字段类型分基础标量、时间日期、高级扩展三类:string映射varchar、text映射text、integer映射int;date/datetime等统一返回datetime对象;json/array/object依赖序列化,binary/blob处理二进制数据。

Doctrine 字段类型是 Symfony 中定义数据库表结构的核心配置,直接决定 PHP 属性如何映射到数据库列及其行为。类型分两大类:基础标量类型(对应 SQL 原生类型)和特殊语义类型(如日期、JSON、对象等),同时支持自定义扩展。
常用基础字段类型(SQL 映射明确)
这些是最常在 @Column 中使用的 type 值,与数据库类型强关联:
-
string → VARCHAR(255),适合短文本;配合
length控制长度(如length=100) - text → TEXT/CLOB,用于长内容(如文章正文、日志),不设 length
-
integer → INT,对应 PHP
int;unsigned=true可限定非负 - smallint → SMALLINT,适合状态码、枚举值(如 0–255)
- bigint → BIGINT,PHP 中以字符串存储(避免溢出),适合大 ID 或计数
-
boolean → TINYINT(1) 或 BOOLEAN,PHP
true/false自动转换 -
decimal → DECIMAL(p,s),用
precision和scale精确控制(如precision=10, scale=2表示最多 10 位、小数点后 2 位) - float → FLOAT/DOUBLE,适合科学计算,但注意浮点精度问题
时间与日期类型(统一返回 DateTime 对象)
所有时间类型在 PHP 层都映射为 DateTimeInterface 实例,无需手动解析:
-
date → DATE,只存年月日(如
2026-05-13) -
time → TIME,只存时分秒(如
11:49:00) - datetime → DATETIME 或 TIMESTAMP,含日期+时间,无时区信息
-
datetimetz → DATETIME/TIMESTAMP,带时区(如
2026-05-13T11:49:00+08:00)
高级与扩展类型(需注意兼容性)
部分类型依赖数据库能力或 Doctrine 配置,使用前建议验证平台支持:
- json → JSON(MySQL 5.7+/PostgreSQL),自动序列化/反序列化数组或对象
- array → TEXT + serialize,兼容旧数据库,但不可被 SQL 查询直接过滤
- object → TEXT + serialize,用于存储任意 PHP 对象(需可序列化)
- guid → CHAR(36),用于 UUID 字符串(如 PostgreSQL 的 UUID 类型需额外配置)
- binary → BLOB,适合小二进制数据(大文件建议存路径)
- blob → BLOB,原始二进制内容,PHP 中为 resource 或 string
自定义与动态类型处理
Doctrine 允许灵活应对特殊需求:
- 用
columnDefinition写原生 DDL(如columnDefinition="CHAR(2) NOT NULL"),但会绕过 SchemaTool 检测 - 用
options传 vendor 特有参数(如{"fixed":true, "comment":"用户昵称缩写"}) - 没有内置
year类型,可用string或smallint存储,逻辑层封装 getter/setter 转换 - ODM(MongoDB)中支持
raw类型,允许字段值为任意类型(string/int/array/object)











