概述
你可能已经在一些表单中使用过了文档块的注释,这个东西有点像是提供文档的元数据(Metadata)的工具,比如PHPDocumentor(一个利用php代码中的注释生成文档的工具:@author @link等等 在java里这样的工具使用的很普遍) .文档块注释工具在文档环节内嵌了一些元数据,这些数据是可以被代码解析的,过程像是json数据被解析成一个js数组,下面来讲讲这些常用的annotation语法
annotation的实现位于 Doctrine\Common\Annotations 下面
参考说明
@Column
俗称表的字段,这个符号标记一个注解的实例变量为持久化的,它必须是在php文档快注释里的实例变量.这个变量里存储的任何值都会被保存起来,然后作为一个实体的生命周期的一部分从数据库里加载.
@Column中必填的属性:
type : doctrine中的类型,在php跟数据库呈现之间转换
@Column中可选的属性:
name : 这个属性对应了数据库中字段名,如果不定义 那么表字段名应该跟这个注解的变量名是一样的
length : 在string字符串类型的字段中 表示了数据库中字符串的最长长度.Doctrine本身不会验证字符串的长度.
precision : 用于十进制中表示的精度 ( 仅用于十进制的字段 )
scale : 十进制数值的范围 (仅用于十进制字段)
unique : 意如其名 是否是唯一 值只有true false,决定字段是否应该是唯一的
nullable : 是否能为NULL 跟数据库为空选项一样
columnDefinition : DDL SQL snippet that starts after the column name and specifies the complete (non-portable!) column definition. This attribute allows to make use of advanced RMDBS features. However you should make careful use of this feature and the consequences. SchemaTool will not detect changes on the column correctly anymore if you use “columnDefinition”. ( understand by your understanding )
补充 : 你不要忘了type属性是操纵介于php和数据库值之间的转换,如果你在一个字段中用这个属性来表示join两个表,你可以看看后面的@JoinColumn
实例代码 :
<?php
/**
* @Column(type="string", length=32, unique=true, nullable=false)
*/
protected $username;
/**
* @Column(type="string", columnDefinition="CHAR(2) NOT NULL")
*/
protected $country;
/**
* @Column(type="decimal", precision=2, scale=1)
*/
protected $height;
@ColumnResult
在sql查询中select短语里的一个字段的引用名.结果范围可以被包含在查询结果中,通过在元数据里设置这个注解.
@ColumnResult必填的属性 :
name : sql语句中select短语的字段名
@Cache
添加缓存机制到一个顶级的实体或者一个集合.
@Cache可选的属性 :
usage : 可以选的值 - READ_ONLY , READ_READ_WRITE , NONSTRICT_READ_WRITE , 默认值是 READ_ONLY
region : 一个特定的区域名
@ChangeTrackingPolicy
ChangeTrackingPolity( 中文名真绕口 : 改变追踪政策 )允许设置 doctrine2工作单元应该在Flush期间检测实体属性的变化.默认的每个实体都通过一个延时机制来检查,这个意味着在flush之前 工作单元结合了所有的实体属性来进行一个快照.这是个盒外工作,然而你可能想通过改变ChangeTrackingPolicy来加强flush时的性能.
这里有个链接 关于详细的ChangeTrackingPolicy:details on all the available change tracking policies
示例代码:
<?php
/**
* @Entity
* @ChangeTrackingPolicy("DEFERRED_IMPLICIT")
* @ChangeTrackingPolicy("DEFERRED_EXPLICIT")
* @ChangeTrackingPolicy("NOTIFY")
*/
class User {}
@DiscriminatorColumn
这个注解对于一个继承下来顶级的类是必选的,它设置了一个字段的详细情况,这些东西保存了类名,这个类就是实例化的实体.
@DiscriminatorColumn必填属性 :
name : 鉴别字段名
来源:oschina
链接:https://my.oschina.net/u/248437/blog/233161