本文整理汇总了Golang中github.com/jinzhu/gorm.DB.FirstOrCreate方法的典型用法代码示例。如果您正苦于以下问题:Golang DB.FirstOrCreate方法的具体用法?Golang DB.FirstOrCreate怎么用?Golang DB.FirstOrCreate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类github.com/jinzhu/gorm.DB
的用法示例。
在下文中一共展示了DB.FirstOrCreate方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Golang代码示例。
示例1: getRole
func (p *AuthDao) getRole(db *gorm.DB, name string, resource_type string, resource_id uint) *Role {
role := Role{}
db.FirstOrCreate(&role, Role{Name: name, ResourceType: resource_type, ResourceID: resource_id})
db.Model(&role).Related(&role.Permissions)
return &role
}
示例2: tailLog
func tailLog(db gorm.DB, eventSample *stripe.Event) error {
// Start paging from after the event sample that we capture before we
// started loading from snapshot.
params := &stripe.EventListParams{}
params.Filters.AddFilter("limit", "", strconv.Itoa(PageSize))
params.Filters.AddFilter("starting_after", "", eventSample.ID)
var apiDuration, dbDuration time.Duration
numProcessed := 0
totalStart := time.Now()
iterator := event.List(params)
timeIterator := func() bool {
start := time.Now()
ret := iterator.Next()
apiDuration = apiDuration + time.Now().Sub(start)
return ret
}
for timeIterator() {
start := time.Now()
event := iterator.Event()
switch event.Type {
case "charge.created":
charge := Charge{
// TODO: deserialize to proper charge object
ID: event.Data.Obj["id"].(string),
Amount: event.Data.Obj["amount"].(uint64),
Created: time.Unix(event.Data.Obj["created"].(int64), 0),
}
db.FirstOrCreate(&charge)
dbDuration = dbDuration + time.Now().Sub(start)
if db.Error != nil {
return db.Error
}
numProcessed = numProcessed + 1
if numProcessed%ReportingIncrement == 0 {
log.Printf("Working. Processed %v record(s).", ReportingIncrement)
}
}
}
if err := iterator.Err(); err != nil {
return err
}
log.Printf("")
log.Printf("== Log Tailing Results")
log.Printf("API duration: %v", apiDuration)
log.Printf("DB duration: %v", dbDuration)
log.Printf("Total duration: %v", time.Now().Sub(totalStart))
log.Printf("Total records processed: %v", numProcessed)
return nil
}
示例3: loadSnapshot
func loadSnapshot(db gorm.DB) error {
params := &stripe.ChargeListParams{}
params.Filters.AddFilter("limit", "", strconv.Itoa(PageSize))
var apiDuration, dbDuration time.Duration
numProcessed := 0
totalStart := time.Now()
iterator := charge.List(params)
timeIterator := func() bool {
start := time.Now()
ret := iterator.Next()
apiDuration = apiDuration + time.Now().Sub(start)
return ret
}
for timeIterator() {
start := time.Now()
charge := convertCharge(iterator.Charge())
db.FirstOrCreate(&charge)
dbDuration = dbDuration + time.Now().Sub(start)
if db.Error != nil {
return db.Error
}
numProcessed = numProcessed + 1
if numProcessed%ReportingIncrement == 0 {
log.Printf("Working. Processed %v record(s).", ReportingIncrement)
}
}
if err := iterator.Err(); err != nil {
return err
}
log.Printf("")
log.Printf("== Snapshot Loading Results")
log.Printf("API duration: %v", apiDuration)
log.Printf("DB duration: %v", dbDuration)
log.Printf("Total duration: %v", time.Now().Sub(totalStart))
log.Printf("Total records processed: %v", numProcessed)
return nil
}
示例4: getTumblrBlog
func getTumblrBlog(name string, db *gorm.DB) *TumblrBlog {
blog := new(TumblrBlog)
db.FirstOrCreate(blog, TumblrBlog{Name: name})
return blog
}
示例5: EnsureRepository
// EnsureRepository inserts a Repository into the database if it doesn't exist and returns that Repository
func EnsureRepository(db *gorm.DB, given Repository) (repo Repository) {
db.FirstOrCreate(&repo, given)
return
}
示例6: ListenAndServe
func ListenAndServe(addr string, auth Auth, dbType DatabaseType) {
var db *gorm.DB
var err error
if dbType == DB_MySQL {
dbConn := fmt.Sprintf("%s:%[email protected](127.0.0.1:3306)", auth.UserName, auth.Password)
db, err = gorm.Open("mysql", dbConn+"/hugocms_"+auth.UserName+"?charset=utf8&parseTime=True&loc=Local")
} else {
db, err = gorm.Open("sqlite3", "hugocms_"+auth.UserName+".db")
}
if err != nil {
handleError(err)
}
db.LogMode(true)
// to reset to an empty database drop the settings table
if !db.HasTable(&models.Settings{}) {
for _, table := range hugocms_qor.Tables {
if err := db.DropTableIfExists(table).Error; err != nil {
handleError(err)
}
}
}
for _, table := range hugocms_qor.Tables {
if err := db.AutoMigrate(table).Error; err != nil {
handleError(err)
}
}
// Because this is a singleton a single record must already exist in the database (there is no create through QOR admin just update)
db.FirstOrCreate(&models.Settings{})
siteName := fmt.Sprintf("%s - Hugo CMS", auth.UserName)
if err := setupConfig(addr, siteName, db, auth); err != nil {
handleError(err)
}
// Add session support - used by Auth
sessionLifetime := 3600 // session lifetime in seconds
SessionManager, err = session.NewManager("memory", fmt.Sprintf(`{"cookieName":"gosessionid","gclifetime":%d}`, sessionLifetime))
if err != nil {
handleError(err)
}
go SessionManager.GC()
// Create Hugo's content directory if it doesnt exist
// TODO read content dir from config
if _, err := os.Stat("./content"); os.IsNotExist(err) {
err = os.MkdirAll("./content", os.ModePerm)
}
mux := http.NewServeMux()
mux.Handle("/", http.FileServer(http.Dir("public")))
adm := hugocms_qor.SetupAdmin()
adm.MountTo("/admin", mux)
adm.GetRouter().Post("/auth", func(ctx *admin.Context) {
// we will only hit this on succesful login - redirect to admin dashboard
w := ctx.Writer
r := ctx.Request
http.Redirect(w, r, "/admin", http.StatusFound)
})
adm.GetRouter().Get("/logout", func(ctx *admin.Context) {
w := ctx.Writer
r := ctx.Request
sess, err := SessionManager.SessionStart(w, r)
if err != nil {
handleError(err)
}
defer sess.SessionRelease(w)
sess.Delete("User")
http.Redirect(w, r, "/login", http.StatusFound)
})
// NOTE: `system` is where QOR admin will upload files e.g. images - we map this to Hugo's static dir along with our other static assets
// TODO read static dir from config
// TODO read static assets list from config
for _, path := range []string{"system", "css", "fonts", "images", "js", "login"} {
mux.Handle(fmt.Sprintf("/%s/", path), http.FileServer(http.Dir("static")))
}
if err := http.ListenAndServe(config.QOR.Addr, mux); err != nil {
handleError(err)
}
// to re-generate site delete `config.json`
if _, err := os.Stat("config.json"); os.IsNotExist(err) {
hugocms_qor.CallSave(adm)
}
fmt.Printf("Listening on: %s\n", config.QOR.Addr)
}
示例7: Create
func (s *Subscriber) Create(db *gorm.DB) error {
return db.FirstOrCreate(s).Error
}
示例8: FillSrcInfo
func FillSrcInfo(path string, db *gorm.DB) error {
f, err := os.Open(path)
if err != nil {
return err
}
defer f.Close()
info, err := srcinfo.ParseSrcInfo(f)
if err != nil {
return err
}
var oldPkgBase PackageBase
db.Select("id").First(&oldPkgBase, "pkg_base = ?", info.Global.PkgBase)
pkgBase := PackageBase{
ID: oldPkgBase.ID,
PkgBase: info.Global.PkgBase,
Packages: []Package{},
Version: info.Global.PkgVer,
Release: info.Global.PkgRel,
Depenencies: []Package{},
Directory: filepath.Dir(path),
}
log.Printf(" {%s}", pkgBase.PkgBase)
depend := func(dependency string) {
pkgName := StripDependencyPkgName(dependency)
log.Printf(" %s => %s", dependency, pkgName)
var dep Package
db.FirstOrCreate(&dep, Package{Name: pkgName})
log.Printf(" %+v", dep)
pkgBase.Depenencies = append(pkgBase.Depenencies, dep)
}
for _, dependency := range info.Global.Depends {
depend(dependency)
}
for _, dependency := range info.Global.MakeDepends {
depend(dependency)
}
for _, pkginfo := range info.Packages {
for _, dependency := range pkginfo.Depends {
depend(dependency)
}
var pkg Package
db.FirstOrCreate(&pkg, Package{
PackageBaseID: pkgBase.ID,
Name: pkginfo.PkgName,
})
log.Printf(" %s", pkginfo.PkgName)
pkgBase.Packages = append(pkgBase.Packages, pkg)
}
db.Save(&pkgBase)
return nil
}