GoFrame 鏈式操作-數(shù)據(jù)庫切換

2022-04-02 10:59 更新

我們知道數(shù)據(jù)庫的配置中有支持對默認數(shù)據(jù)庫的配置,因此?DB?對象及?Model?對象在初始化的時候已經(jīng)綁定到了特定的數(shù)據(jù)庫上。運行時切換數(shù)據(jù)庫有幾種方案(假如我們的數(shù)據(jù)庫有?user?用戶數(shù)據(jù)庫和?order?訂單數(shù)據(jù)庫):

  • 通過不同的配置分組來實現(xiàn)。這需要在配置文件中配置不同的分組配置,隨后在程序中可以通過?g.DB("分組名稱")?來獲取特定數(shù)據(jù)庫的單例對象。
  • 通過運行時?DB.SetSchema?方法切換單例對象的數(shù)據(jù)庫,需要注意的是由于修改的是單例對象的數(shù)據(jù)庫配置,因此影響是全局的:

 g.DB().SetSchema("user-schema")
 g.DB().SetSchema("order-schema")

  • 通過鏈式操作?Schema?方法創(chuàng)建?Schema?數(shù)據(jù)庫對象,并通過該數(shù)據(jù)庫對象創(chuàng)建模型對象并執(zhí)行后續(xù)鏈式操作:

 db.Schema("user-schema").Model("user").All()
 db.Schema("order-schema").Model("order").All()

也可以通過鏈式操作?Model.Schema?方法設置當前鏈式操作對應的數(shù)據(jù)庫,沒有設置的情況下使用的是其?DB?或者?TX?默認連接的數(shù)據(jù)庫:

 db.Model("user").Schema("user-schema").All()
 db.Model("order").Schema("order-schema").All()

注意兩種使用方式的差別,前一種方式來自于?Schema?對象創(chuàng)建?Model?對象后執(zhí)行操作;后一種方式是通過修改當前?Model?對象操作的數(shù)據(jù)庫名稱達到切換數(shù)據(jù)庫的目的。

  • 此外,假如當前數(shù)據(jù)庫操作配置的用戶有權(quán)限,那么可以直接通過表名中帶數(shù)據(jù)庫名稱實現(xiàn)跨域操作,甚至跨域關(guān)聯(lián)查詢:

 // SELECT * FROM `order`.`order` o LEFT JOIN `user`.`user` u ON (o.uid=u.id) WHERE u.id=1 LIMIT 1
 db.Model("order.order o").LeftJoin("user.user u", "o.uid=u.id").Where("u.id", 1).One()


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號