Beego框架學習筆記03--Beego Orm雜記
1.Mysql中時間格式問題
MySql中時間格式有兩種:【DATETIME】【 TIMESTAMP】【DATE】【TIME】【YEAR】五種
而go中只有一種【time.Time】
ps:go語言中時間戳型別time轉換為字串string具有固定的轉換語法
time.Now().Format("2006-01-02-15-04-05")
2.資料表關係:
(1)一對一(不常見,通常寫在一張表裡)
一表存在“單鍵”,表示當前表歸屬哪個表,但是這種新增對應關係並不會在資料庫表中真的出現新增欄位。只是orm結構體知道。
對本表字段新增約束:欄位名 *二表指標型別 `orm:"rel(one)”
二表存在對應“單鍵”,表示當前表歸屬哪個表,同理也不會出現真的欄位
對本表字段新增約束:欄位名*一表指標型別 `orm:"reverse(one)”`
(2)一對多(非常常見,例如一個班級表對應很多學生表,一個學生表只能對應一個班級表)
子表存在“外來鍵”,表示當前表歸屬哪個表,這種新增對應關係會在資料庫中子表的內部新增一個外來鍵欄位。
對子表字段新增約束:欄位名 *父表指標型別 `orm:"rel(fk)” //fk,即foreign key
父表存在對應,表示當前表擁有哪些表
對父表字段新增成員:欄位名 []*子表指標切片型別 `orm:"reverse(many)"`
(3)多對多(比較常見,使用麻煩)
一表和二表都會存在對應欄位,都是指標切片型別,畢竟一表可對應多個二表,二表也可對應多個一表。
一表:欄位名 []*二表指標切片型別 `orm:"rel(m2m)"`
二表:欄位名 []*一表指標切片型別 `orm:”reverse(many)”`
說明:對於表關係而言,存在一個rel欄位,就必然在另外一個表中對應有一個reverse欄位!
說明:rel負責決定是表關係,例如是【一對多(fk外來鍵)】【多對多(m2m)】還是【一對一(one)】
說明:當多對多關係表被建立的時候,資料庫會自動生成一個額外的關係表。這張關係表中只有兩個對應表的主鍵id欄位。
3.beego orm 讀取資料庫表中全部資料範例
//建立資料儲存容器
var stuInfoSlice []models.stuInfo
//1.獲取orm物件
o := orm.NewOrm()
//2.獲取索引表stuInfo的querySeter具柄,提供高階檢索功能
qs := o.QueryTable("stuInfo”)
//3.執行檢索,獲得結果
_,err := qs.All(&stuInfoSlice)
//4.校驗結果
if err!=nil{
beego.Error("查詢所有型別資料失敗")
c.Redirect("/指定頁面",300)
return
}
//5.檢索成功,返回資料
c.Data["stuInfoSlice"] = stuInfoSlice