你可能已經在一些表單中使用過了文檔塊的註釋,這個東西有點像是提供文檔的元數據(Metadata)的工具,好比PHPDocumentor(一個利用php代碼中的註釋生成文檔的工具:@author @link等等 在java裏這樣的工具使用的很廣泛) .文檔塊註釋工具在文檔環節內嵌了一些元數據,這些數據是能夠被代碼解析的,過程像是json數據被解析成一個js數組,下面來說講這些經常使用的annotation語法
php
annotation的實現位於 Doctrine\Common\Annotations 下面
html
俗稱表的字段,這個符號標記一個註解的實例變量爲持久化的,它必須是在php文檔快註釋裏的實例變量.這個變量裏存儲的任何值都會被保存起來,而後做爲一個實體的生命週期的一部分從數據庫里加載.java
@Column中必填的屬性:sql
type : doctrine中的類型,在php跟數據庫呈現之間轉換
數據庫
@Column中可選的屬性:json
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;
在sql查詢中select短語裏的一個字段的引用名.結果範圍能夠被包含在查詢結果中,經過在元數據裏設置這個註解.
@ColumnResult必填的屬性 :
name : sql語句中select短語的字段名
添加緩存機制到一個頂級的實體或者一個集合.
@Cache可選的屬性 :
usage : 能夠選的值 - READ_ONLY , READ_READ_WRITE , NONSTRICT_READ_WRITE , 默認值是 READ_ONLY
region : 一個特定的區域名
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必填屬性 :
name : 鑑別字段名