symfony中doctrine常用属性
转 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html
1. doctrine字段属性:
<?php /** @Entity */ class Message { /** @Column(type="integer") */ private $id; /** @Column(length=140) */ private $text; /** @Column(type="datetime", name="posted_at") */ private $postedAt; }
- 属性id对应列id,类型为integer
- 属性text对应列text,类型默认为string
- 属性postedAt对应列posted_at,类型为datatime
- type:(默认为‘string’)类型
- name:(默认为字段名称)数据库列名
- length(默认为‘255’)数据库中列值的长度(仅适用于使用string类型的列)
- unique(默认为‘false’)列值是否唯一
- nullable:(默认为‘false’)列是否可为空
- precision:(默认为0)数字的精确值,值存储的最大位数,仅适用于十进制
- scale:(默认为0)数字的长度,仅适用于十进制,表示小数点右侧的位数,不能大于precision值。
- columnDefinition:允许用户定义用于创建列的自定义DDL代码段。注意:这通常会使SchemaTool混淆,以总是检测该列为已更改。
- option:生成DDL语句时传递给底层数据库平台的键值对选项。
- default:如果没有提供值,则为列设置的默认值。
- unsigned:布尔值来确定列是否只能表示非负整数(仅适用于整数列,可能不被所有vendors支持)。
- fixed:布尔值来确定字符串列的指定长度是否应该是固定的或变化的(仅适用于字符串/二进制列,并且可能不被所有vendors支持)。
- comment:注释,可能不被所有vendors支持
- check:向列添加检查约束类型(可能不被所有vendors支持)。
2. doctrine字段类型:
doctrine | SQL | php |
string | VARCHAR | string |
integer | INT | integer |
smallint | SMALLINT | integer |
bigint | BIGINT | string |
boolean | boolean or equivalent (TINYINT) | boolean |
decimal | DECIMAL | string |
date | DATETIME | DateTime object |
time | TIME | DateTime object |
datetime | DATETIME/TIMESTAMP | DateTime object |
datetimetz | DATETIME/TIMESTAMP | DateTime object with timezone |
text | CLOB | string |
object | CLOB | object using serialize() and unserialize() |
array | CLOB | array using serialize() and unserialize() |
simple_array | CLOB | array using implode() and explode() ,使用逗号当分隔符,(注意)仅当值中不包含“,”时方可使用 |
json_array | CLOB | array using json_encode() and json_decode() |
float | Float (Double Precision) | double,(注意)仅适用于使用小数点作为分隔符的区域设置 |
guid | GUID/UUID | string,默认为varchar,但如果平台支持,则使用特定类型。 |
blob | BLOB | resource stream |
3. 主键(标识键)
可以使用 @Id 注释作为标识符的字段。同时可以使用自动生成器 @GeneratedValue 。
<?php class Message { /** * @Id @Column(type="integer") * @GeneratedValue */ private $id; //... }
3.1 标识键生成策略
- AUTO:(默认),使用数据库优先策略,具有良好的可移植性
- SEQUENCE:使用数据库序列来生成ID。目前没有提供完整的可移植性。
- IDENTITY:在数据库中使用特殊身份列,以生成插入行的值。这个策略目前没有提供完整的可移植性,由以下平台支持:MySQL / SQLite / SQL Anywhere(AUTO_INCREMENT),MSSQL(IDENTITY)和PostgreSQL(SERIAL)。
- UUID:使用内置的通用唯一标识键生成器。这一策略提供了完整的可移植性。
- TABLE:使用单独的表来生成ID。这一策略提供了完整的可移植性。 注意:此策略尚未实施!
- NONE:标识符由代码分配(并由此生成)。必须在新实体传递给 EntityManager#persist 之前进行分配。NONE相当于完全不使用 @GeneratedValue 。
- CUSTOM:可以使用 @CustomIdGenerator 注释,允许通过自己的类生成标识键。