日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?模型創(chuàng)建

模型創(chuàng)建

Model

?Model?方法用于創(chuàng)建基于數(shù)據(jù)表的?Model?對(duì)象。常見(jiàn)的,也可以使用?g?對(duì)象管理模塊中的?Model?方法在默認(rèn)的數(shù)據(jù)庫(kù)配置上創(chuàng)建?Model?對(duì)象。

使用示例:

g.Model("user")
// 或者或者
g.DB().Model("user")

此外,在某些場(chǎng)景下,我們也可以通過(guò)?DB?方法切換當(dāng)前模型的數(shù)據(jù)庫(kù)對(duì)象,例如:

m := g.Model("user")
m  = m.DB(g.DB("user-center"))

其效果與以下操作是一樣的:

m := g.DB("user-center").Model("user")

Raw

?Raw?方法用于創(chuàng)建一個(gè)基于原始?SQL?語(yǔ)句的?Model?對(duì)象。也可以使用?g?對(duì)象管理模塊中的?ModelRaw?方法通過(guò)給定的?SQL?語(yǔ)句在默認(rèn)的數(shù)據(jù)庫(kù)配置上創(chuàng)建?Model?對(duì)象。

s := "SELECT * FROM `user` WHERE `status` IN(?)"
m := g.ModelRaw(s, g.Slice{1,2,3}).WhereLT("age", 18).Limit(10).OrderAsc("id").All()
// SELECT * FROM `user` WHERE `status` IN(1,2,3) AND `age`<18 ORDER BY `id` ASC LIMIT 10

鏈?zhǔn)桨踩?

鏈?zhǔn)桨踩皇悄P筒僮鞯膬煞N方式區(qū)別:一種會(huì)修改當(dāng)前?model?對(duì)象(不安全,默認(rèn)),一種不會(huì)(安全)但是模型屬性修改/條件疊加需要使用賦值操作,僅此而已。

默認(rèn)情況

在默認(rèn)情況下,?gdb?是非鏈?zhǔn)桨踩?,也就是說(shuō)鏈?zhǔn)讲僮鞯拿恳粋€(gè)方法都將對(duì)當(dāng)前操作的?Model?屬性進(jìn)行修改,因此該?Model?對(duì)象不可以重復(fù)使用。例如,當(dāng)存在多個(gè)分開(kāi)查詢(xún)的條件時(shí),我們可以這么來(lái)使用?Model?對(duì)象:

user := g.Model("user")
user.Where("status IN(?)", g.Slice{1,2,3})
if vip {
    // 查詢(xún)條件自動(dòng)疊加,修改當(dāng)前模型對(duì)象
    user.Where("money>=?", 1000000)
} else {
    // 查詢(xún)條件自動(dòng)疊加,修改當(dāng)前模型對(duì)象
    user.Where("money= 1000000
// !vip: SELECT * FROM user WHERE status IN(1,2,3) AND money < 1000000
r, err := user.All()
//  vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money >= 1000000
// !vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money < 1000000
n, err := user.Count()

可以看到,如果是分開(kāi)執(zhí)行鏈?zhǔn)讲僮鳎準(zhǔn)降拿恳粋€(gè)操作都會(huì)修改已有的?Model?對(duì)象,查詢(xún)條件會(huì)自動(dòng)疊加,因此?user?對(duì)象不可重復(fù)使用,否則條件會(huì)不停疊加。并且在這種使用方式中,每次我們需要操作?user?用戶(hù)表,都得使用?g.DB().Table("user")?這樣的語(yǔ)法創(chuàng)建一個(gè)新的?user?模型對(duì)象,相對(duì)來(lái)說(shuō)會(huì)比較繁瑣。

默認(rèn)情況下,基于性能以及?GC?優(yōu)化考慮,模型對(duì)象為非鏈?zhǔn)桨踩乐巩a(chǎn)生過(guò)多的臨時(shí)模型對(duì)象。

Clone方法

此外,我們也可以手動(dòng)調(diào)動(dòng)?Clone?方法克隆當(dāng)前模型,創(chuàng)建一個(gè)新的模型來(lái)實(shí)現(xiàn)鏈?zhǔn)桨踩捎谑切碌哪P蛯?duì)象,因此并不擔(dān)心會(huì)修改已有的模型對(duì)象的問(wèn)題。例如:

// 定義一個(gè)用戶(hù)模型單例
user := g.Model("user")
// 克隆一個(gè)新的用戶(hù)模型
m := user.Clone()
m.Where("status IN(?)", g.Slice{1,2,3})
if vip {
    m.And("money>=?", 1000000)
} else {
    m.And("money= 1000000
// !vip: SELECT * FROM user WHERE status IN(1,2,3) AND money < 1000000
r, err := m.All()
//  vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money >= 1000000
// !vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money < 1000000
n, err := m.Count()

Safe方法

當(dāng)然,我們可以通過(guò)?Safe?方法設(shè)置當(dāng)前模型為鏈?zhǔn)桨踩膶?duì)象,后續(xù)的每一個(gè)鏈?zhǔn)讲僮鞫紝⒎祷匾粋€(gè)新的?Model?對(duì)象,該?Model?對(duì)象可重復(fù)使用。但需要特別注意的是,模型屬性的修改,或者操作條件的疊加,需要通過(guò)變量賦值的方式(?m = m.xxx?)覆蓋原有的模型對(duì)象來(lái)實(shí)現(xiàn)。例如:

// 定義一個(gè)用戶(hù)模型單例
user := g.Model("user").Safe()
m := user.Where("status IN(?)", g.Slice{1,2,3})
if vip {
    // 查詢(xún)條件通過(guò)賦值疊加
    m = m.And("money>=?", 1000000)
} else {
    // 查詢(xún)條件通過(guò)賦值疊加
    m = m.And("money= 1000000
// !vip: SELECT * FROM user WHERE status IN(1,2,3) AND money < 1000000
r, err := m.All()
//  vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money >= 1000000
// !vip: SELECT COUNT(1) FROM user WHERE status IN(1,2,3) AND money < 1000000
n, err := m.Count()

可以看到,示例中的用戶(hù)模型單例對(duì)象?user?可以重復(fù)使用,而不用擔(dān)心被“污染”的問(wèn)題。在這種鏈?zhǔn)桨踩姆绞较拢覀兛梢詣?chuàng)建一個(gè)用戶(hù)單例對(duì)象?user?,并且可以重復(fù)使用到后續(xù)的各種查詢(xún)中。但是存在多個(gè)查詢(xún)條件時(shí),條件的疊加需要通過(guò)模型賦值操作(?m = m.xxx?)來(lái)實(shí)現(xiàn)。

使用?Safe?方法標(biāo)記之后,每一個(gè)鏈?zhǔn)讲僮鞫紝?huì)創(chuàng)建一個(gè)新的臨時(shí)模型對(duì)象(內(nèi)部自動(dòng)使用?Clone?實(shí)現(xiàn)模型克?。?,從而實(shí)現(xiàn)鏈?zhǔn)桨踩?。這種使用方式在模型操作中比較常見(jiàn)。


新聞標(biāo)題:創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?模型創(chuàng)建
URL鏈接:http://www.dlmjj.cn/article/ccsjihp.html