beego tag詳解

正在攀登的小蝸牛發表於2020-12-14


在使用ORM操作建立表時,經常需要用一些tag標籤,在這裡做一整理

1. auto

當 Field 型別為 int, int32, int64, uint, uint32, uint64 時,可以設定欄位為自增健

	 AnyField  int    `orm:"auto"`

2. pk

設定為主鍵,適用於自定義其他型別為主鍵

	 AnyField  int    `orm:"pk"`

3. - 忽略欄位

設定 - 即可忽略 struct 中的欄位

4. null

資料庫表預設為 NOT NULL,設定 null 代表不允許為空

5. index

為單個欄位增加索引

6. unique

為單個欄位增加 unique 鍵,讓該屬性的內容不同重複

7. column

為欄位設定 db 欄位的名稱,就是設定列名

Name string `orm:"column(user_name)"`

8. size

設定欄位大小,如需設定vchar型別最大長度為60,則用size(60),

9. digits / decimals

設定 float32, float64 型別的浮點精度

Money float64 `orm:"digits(12);decimals(4)"`

10. auto_now / auto_now_add

auto_now 每次 model 儲存時都會對時間自動更新
auto_now_add 第一次儲存時才設定時間

Created time.Time `orm:"auto_now_add;type(datetime)"`
Updated time.Time `orm:"auto_now;type(datetime)"`

注意: 對於批量的 update 此設定是不生效的

11. type

設定為 date 時,time.Time 欄位的對應 db 型別使用 date

Created time.Time `orm:"auto_now_add;type(date)"`

設定為 datetime 時,time.Time 欄位的對應 db 型別使用 datetime

Created time.Time `orm:"auto_now_add;type(datetime)"`

12. default

為欄位設定預設值,型別必須符合(目前僅用於級聯刪除時的預設值)

13. 使用例項

type Server struct {
    // ID 不會匯出到JSON中
    ID int `json:"-"`
    // ServerName 的值會進行二次JSON編碼
    ServerName  string `json:"serverName"`
   //含有都是json多個json輸出用到的tag的時候
    ServerName2 string `json:"serverName2,string"`
    // 如果 ServerIP 為空,則不輸出到JSON串中
    ServerIP   string `json:"serverIP,omitempty"`
}
type studentinfo struct {
    //設定主鍵且為自動增長(可以不設定,預設就是這樣)
    Id          int    `pk:"auto"`
    //設定欄位的長度
    Stuname     string `orm:"size(20)"`
    Stuidentify string `orm:"size(30)"`
    Stubirth    time.Time
    Stuclass    string `orm:"size(30)"`
    Stumajor    string `orm:"size(30)"`
}

type Userinfos struct {
    //設定主鍵自動增長的
    Id      int  `pk:"auto"`
    //設定欄位的大小
    Name    string `orm:"size(30)"`
    // OneToOne 關係 同時含有json輸出格式
    Profile *Profile `orm:"rel(one)"  json:"profile,omitempty`
    //Post    []*Post  `orm:"reverse(many)"` // 設定一對多的反向關係
}

type Profile struct {
    Id     int
    Age    int
    Email  string
    Gender string
    // 設定一對一反向關係(可選)
    User   *Userinfos `orm:"reverse(one)"` 
}

type Post struct {
    Id    int
    Title string
    //設定多對多關係
    Tags  []*Tag     `orm:"rel(m2m)"`
}

type Tag struct {
    Id    int
    Name  string
    //設定反向多對多關係
    Posts []*Post `orm:"reverse(many)"`
}

相關文章