improve gconv.Bool for NO/YES; improve gdb for model generation

This commit is contained in:
John
2019-09-02 15:48:25 +08:00
parent 6ccc4d119f
commit b1c2b9f4e0
12 changed files with 194 additions and 81 deletions

View File

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

View File

@ -0,0 +1,18 @@
package main
import (
"github.com/gogf/gf/frame/g"
)
func main() {
db := g.DB()
db.SetDebug(true)
tables, err := db.Tables()
if err != nil {
panic(err)
}
if tables != nil {
g.Dump(tables)
}
}

View File

@ -0,0 +1,25 @@
package main
import (
"github.com/gogf/gf/frame/g"
)
func main() {
db := g.DB()
db.SetDebug(true)
tables, e := db.Tables()
if e != nil {
panic(e)
}
if tables != nil {
g.Dump(tables)
for _, table := range tables {
fields, err := db.TableFields(table)
if err != nil {
panic(err)
}
g.Dump(fields)
}
}
}

View File

@ -1,10 +1,8 @@
package test
import (
"github.com/gogf/gf/database/gdb"
"github.com/gogf/gf/frame/g"
)
import "github.com/gogf/gf/database/gdb"
func DB() gdb.DB {
return g.DB()
}
var (
// ConfigGroup is the configuration group name for this model.
ConfigGroup = gdb.DEFAULT_GROUP_NAME
)

View File

@ -3,13 +3,13 @@ package test
import (
"database/sql"
"github.com/gogf/gf/debug/gdebug"
"github.com/gogf/gf/frame/gins"
"github.com/gogf/gf/frame/g"
"github.com/gogf/gf/database/gdb"
"github.com/gogf/gf/os/gtime"
)
// User is the golang structure for table user.
type User struct {
Id int `orm:"id,primary" json:"id"`
Passport string `orm:"passport" json:"passport"`
@ -18,50 +18,59 @@ type User struct {
CreateTime *gtime.Time `orm:"create_time" json:"create_time"`
}
// UserModel is the model of convenient operations for table user.
type UserModel struct {
*gdb.Model
TableName string
}
var (
UserTableName = "user"
gUserModelCacheKey = gdebug.CallerFilePath()
// UserTableName is the table name of user.
UserTableName = "user"
)
// ModelUser creates and returns a new model object for table user.
func ModelUser() *UserModel {
return gins.GetOrSetFunc(gUserModelCacheKey, func() interface{} {
return &UserModel{
DB().Table(UserTableName).Safe(),
UserTableName,
}
}).(*UserModel)
return &UserModel{
g.DB(ConfigGroup).Table(UserTableName).Safe(),
UserTableName,
}
}
// Inserts does "INSERT...INTO..." statement for inserting current object into table.
func (r *User) Insert() (result sql.Result, err error) {
return ModelUser().Data(r).Insert()
}
// Replace does "REPLACE...INTO..." statement for inserting current object into table.
// If there's already another same record in the table (it checks using primary key or unique index),
// it deletes it and insert this one.
func (r *User) Replace() (result sql.Result, err error) {
return ModelUser().Data(r).Replace()
}
// Save does "INSERT...INTO..." statement for inserting/updating current object into table.
// It updates the record if there's already another same record in the table
// (it checks using primary key or unique index).
func (r *User) Save() (result sql.Result, err error) {
return ModelUser().Data(r).Save()
}
// Update does "UPDATE...WHERE..." statement for updating current object from table.
// It updates the record if there's already another same record in the table
// (it checks using primary key or unique index).
func (r *User) Update() (result sql.Result, err error) {
return ModelUser().Data(r).Where(gdb.GetWhereConditionOfStruct(r)).Update()
}
// Delete does "DELETE FROM...WHERE..." statement for deleting current object from table.
func (r *User) Delete() (result sql.Result, err error) {
return ModelUser().Where(gdb.GetWhereConditionOfStruct(r)).Delete()
}
// Select overwrite the Select method from gdb.Model for model
// as retuning all objects with specified structure.
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
@ -69,8 +78,10 @@ func (m *UserModel) All() ([]*User, error) {
return array, nil
}
func (m *UserModel) One() (*User, error) {
list, err := m.All()
// First does the same logistics as One method from gdb.Model for model
// as retuning first/one object with specified structure.
func (m *UserModel) First() (*User, error) {
list, err := m.Select()
if err != nil {
return nil, err
}