2

xorm读取mysql数据库问题

ORMkeepzeal1765 次浏览

请问init.go里engine = models.Engine 和application.go的engine *xorm.Engine的关系是怎样的。 还有个问题,我感觉在application.go里可以直接用models.Engine.Where直接sql,但是使用不了,请问为什么。 谢谢

///////////////////////////////////////
//   controllers/init.go
///////////////////////////////////////
package controllers
import (
    "github.com/robfig/revel"
    "myweb/app/models"
)
func init() {
    revel.OnAppStart(Init)
}
func Init() {
    engine = models.Engine
}
 
 
 
///////////////////////////////////////
//   controllers/application.go
///////////////////////////////////////
package controllers
import (
    "github.com/go-xorm/xorm"
    "github.com/robfig/revel"
    "myweb/app/models"
)
var (
    engine *xorm.Engine
)
type Application struct {
    *revel.Controller
}
func (c *Application) checkUser() revel.Result {
    user := c.user()
    if user != nil {
        c.RenderArgs["user"] = user
    }
    return nil
}
func (c *Application) user() *models.User {
    if c.RenderArgs["user"] != nil {
        return c.RenderArgs["user"].(*models.User)
    }
    if username, ok := c.Session["user"]; ok {
        return c.getUser(username)
    }
    return nil
}
func (c *Application) getUser(username string) *models.User {
    var user models.User
    has, _ := engine.Where("name = ?", username).Get(&user)
    if !has {
        return nil
    }
    return &user
}
 

 

共2个回复
admin 回复

没发现有什么不妥,你贴的代码什么地方有问题?

keepzeal 回复

application.go的engine *xorm.Engine这里声明的 engine = models.Engine 这里赋值的。我是这么理解的,按常理来讲 是可以直接用models.Engine我这里测试可以直接用。