improve model feature

This commit is contained in:
John
2019-08-30 20:29:12 +08:00
parent a31108e753
commit ee89a06b3e
17 changed files with 232 additions and 53 deletions

View File

@ -0,0 +1,4 @@
# MySQL数据库配置
[database]
link = "mysql:root:12345678@tcp(127.0.0.1:3306)/test"

View File

@ -0,0 +1,15 @@
package main
import (
"github.com/gogf/gf/.example/frame/mvc/model/test"
"github.com/gogf/gf/frame/g"
)
func main() {
g.DB().SetDebug(true)
user, err := test.ModelUser().One()
g.Dump(err)
g.Dump(user)
user.Password = "1"
g.Dump(user.Update())
}

View File

@ -0,0 +1,10 @@
package test
import (
"github.com/gogf/gf/database/gdb"
"github.com/gogf/gf/frame/g"
)
func DB() gdb.DB {
return g.DB()
}

View File

@ -0,0 +1,81 @@
package test
import (
"database/sql"
"github.com/gogf/gf/debug/gdebug"
"github.com/gogf/gf/frame/gins"
"github.com/gogf/gf/database/gdb"
"github.com/gogf/gf/os/gtime"
)
type User struct {
Id int `orm:"id,primary" json:"id"`
Passport string `orm:"passport" json:"passport"`
Password string `orm:"password" json:"password"`
NickName string `orm:"nickname" json:"nick_name"`
CreateTime *gtime.Time `orm:"create_time" json:"create_time"`
}
type UserModel struct {
*gdb.Model
TableName string
}
var (
UserTableName = "user"
gUserModelCacheKey = gdebug.CallerFilePath()
)
func ModelUser() *UserModel {
return gins.GetOrSetFunc(gUserModelCacheKey, func() interface{} {
return &UserModel{
DB().Table(UserTableName).Safe(),
UserTableName,
}
}).(*UserModel)
}
func (r *User) Insert() (result sql.Result, err error) {
return ModelUser().Data(r).Insert()
}
func (r *User) Replace() (result sql.Result, err error) {
return ModelUser().Data(r).Replace()
}
func (r *User) Save() (result sql.Result, err error) {
return ModelUser().Data(r).Save()
}
func (r *User) Update() (result sql.Result, err error) {
return ModelUser().Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
}
func (r *User) Delete() (result sql.Result, err error) {
return ModelUser().Where(gdb.GetWhereConditionOfStruct(r)).Delete()
}
func (m *UserModel) Select() ([]*User, error) {
return m.All()
}
func (m *UserModel) All() ([]*User, error) {
array := ([]*User)(nil)
if err := m.Scan(&array); err != nil {
return nil, err
}
return array, nil
}
func (m *UserModel) One() (*User, error) {
list, err := m.All()
if err != nil {
return nil, err
}
if len(list) > 0 {
return list[0], nil
}
return nil, nil
}