日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

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

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?時間維護(hù)

需要注意,該特性僅對鏈?zhǔn)讲僮饔行А?/p>

?gdb?模塊支持對數(shù)據(jù)記錄的寫入、更新、刪除時間自動填充,提高開發(fā)維護(hù)效率。為了便于時間字段名稱、類型的統(tǒng)一維護(hù),如果使用該特性,我們約定:

  • 字段應(yīng)當(dāng)設(shè)置允許值為?null?。
  • 字段的類型必須為時間類型,如:?date?,  ?datetime?,  ?timestamp?。不支持?jǐn)?shù)字類型字段,如?int?。
  • 字段的名稱不支持自定義設(shè)置,并且固定名稱約定為:
    • ?created_at?用于記錄創(chuàng)建時更新,僅會寫入一次。
    • ?updated_at?用于記錄修改時更新,每次記錄變更時更新。
    • ?deleted_at?用于記錄的軟刪除特性,只有當(dāng)記錄刪除時會寫入一次。

字段名稱其實不區(qū)分大小寫,也會忽略特殊字符,例如?CreatedAt?,  ?UpdatedAt?,  ?DeletedAt?也是支持的。此外,時間字段名稱可以通過配置文件進(jìn)行自定義修改,并可使用?TimeMaintainDisabled?配置完整關(guān)閉該特性。

對時間類型的固定其實是為了形成一種規(guī)范。

特性的啟用

當(dāng)數(shù)據(jù)表包含?created_at?、?updated_at?、?deleted_at?任意一個或多個字段時,該特性自動啟用。

以下的示例中,我們默認(rèn)示例中的數(shù)據(jù)表均包含了這3個字段。

created_at寫入時間

在執(zhí)行?Insert/InsertIgnore/BatchInsert/BatchInsertIgnore?方法時自動寫入該時間,隨后保持不變。

// INSERT INTO `user`(`name`,`created_at`,`updated_at`) VALUES('john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
db.Model("user").Data(g.Map{"name": "john"}).Insert()

// INSERT IGNORE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
db.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).InsertIgnore()

// REPLACE INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10000,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`)
db.Model("user").Data(g.Map{"uid": 10000, "name": "john"}).Replace()

// INSERT INTO `user`(`uid`,`name`,`created_at`,`updated_at`) VALUES(10001,'john', `2020-06-06 21:00:00`, `2020-06-06 21:00:00`) ON DUPLICATE KEY UPDATE `uid`=VALUES(`uid`),`name`=VALUES(`name`),`updated_at`=VALUES(`updated_at`)
db.Model("user").Data(g.Map{"uid": 10001, "name": "john"}).Save()

需要注意的是?Replace?方法也會更新該字段,因為該操作相當(dāng)于刪除已存在的舊數(shù)據(jù)并重新寫一條數(shù)據(jù)。

updated_at更新時間

在執(zhí)行?Insert/InsertIgnore/BatchInsert/BatchInsertIgnore?方法時自動寫入該時間,在執(zhí)行?Save/Update?時更新該時間(注意當(dāng)寫入數(shù)據(jù)存在時會更新?updated_at?時間,不會更新?created_at?時間)。

// UPDATE `user` SET `name`='john guo',`updated_at`='2020-06-06 21:00:00' WHERE name='john'
db.Model("user").Data(g.Map{"name" : "john guo"}).Where("name", "john").Update()

// UPDATE `user` SET `status`=1,`updated_at`='2020-06-06 21:00:00' ORDER BY `login_time` asc LIMIT 10
db.Model("user").Data("status", 1).Order("login_time asc").Limit(10).Update()

// INSERT INTO `user`(`id`,`name`,`update_at`) VALUES(1,'john guo','2020-12-29 20:16:14') ON DUPLICATE KEY UPDATE `id`=VALUES(`id`),`name`=VALUES(`name`),`update_at`=VALUES(`update_at`)
db.Model("user").Data(g.Map{"id": 1, "name": "john guo"}).Save()

需要注意的是?Replace?方法也會更新該字段,因為該操作相當(dāng)于刪除已存在的舊數(shù)據(jù)并重新寫一條數(shù)據(jù)。

deleted_at數(shù)據(jù)軟刪除

軟刪除會稍微比較復(fù)雜一些,當(dāng)軟刪除存在時,所有的查詢語句都將會自動加上?deleted_at?的條件。

// UPDATE `user` SET `deleted_at`='2020-06-06 21:00:00' WHERE uid=10
db.Model("user").Where("uid", 10).Delete()

查詢的時候會發(fā)生一些變化,例如:

// SELECT * FROM `user` WHERE uid>1 AND `deleted_at` IS NULL
db.Model("user").Where("uid>?", 1).All()

可以看到當(dāng)數(shù)據(jù)表中存在?deleted_at?字段時,所有涉及到該表的查詢操作都將自動加上?deleted_at IS NULL?的條件

聯(lián)表查詢的場景

如果關(guān)聯(lián)查詢的幾個表都啟用了軟刪除特性時,會發(fā)生以下這種情況,即條件語句中會增加所有相關(guān)表的軟刪除時間判斷。

// SELECT * FROM `user` AS `u` LEFT JOIN `user_detail` AS `ud` ON (ud.uid=u.uid) WHERE u.uid=10 AND `u`.`deleted_at` IS NULL AND `ud`.`deleteat` IS NULL LIMIT 1
db.Model("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid").Where("u.uid", 10).One()

Unscoped忽略時間特性

?Unscoped?用于在鏈?zhǔn)讲僮髦泻雎宰詣訒r間更新特性,例如上面的示例,加上?Unscoped?方法后:

// SELECT * FROM `user` WHERE uid>1
db.Model("user").Unscoped().Where("uid>?", 1).All()

// SELECT * FROM `user` AS `u` LEFT JOIN `user_detail` AS `ud` ON (ud.uid=u.uid) WHERE u.uid=10 LIMIT 1
db.Model("user", "u").LeftJoin("user_detail", "ud", "ud.uid=u.uid").Where("u.uid", 10).Unscoped().One()


網(wǎng)站名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame鏈?zhǔn)讲僮?時間維護(hù)
URL分享:http://m.5511xx.com/article/dpchhss.html