package main import ( "encoding/json" "platform/pkg/orm" m "platform/web/models" q "platform/web/queries" "time" "github.com/glebarez/sqlite" "gorm.io/gorm" ) func main() { open, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{}) if err != nil { panic(err) } err = open.AutoMigrate(&m.Resource{}, &m.ResourcePss{}) if err != nil { panic(err) } q.SetDefault(open) var r = &m.Resource{ ID: 1, UserID: 101, Active: true, } open.Create(r) var resourcePss = &m.ResourcePss{ ID: 1, ResourceID: 1, Type: 1, Live: 180, Expire: time.Now().AddDate(1, 0, 0), DailyLimit: 10000, } open.Create(resourcePss) var resource = new(ResourceInfo) data := q.Resource.As("data") pss := q.ResourcePss.As("pss") err = data.Scopes(orm.Alias(data)). Select( data.ID, data.UserID, data.Active, pss.Type, pss.Live, pss.DailyUsed, pss.DailyLimit, pss.DailyLast, pss.Quota, pss.Used, pss.Expire, ). LeftJoin(q.ResourcePss.As("pss"), pss.ResourceID.EqCol(data.ID)). Where(data.ID.Eq(1)). Scan(&resource) if err != nil { panic(err) } bytes, err := json.MarshalIndent(resource, "", " ") if err != nil { panic(err) } println(string(bytes)) } type ResourceInfo struct { Id int32 UserId int32 Active bool Type int32 Live int32 DailyLimit int32 DailyUsed int32 DailyLast time.Time Quota int32 Used int32 Expire time.Time }