1. 程式人生 > >Beego框架學習筆記03--Beego Orm雜記

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