add Raw Model for package gdb

This commit is contained in:
John Guo
2021-06-18 15:27:49 +08:00
parent 5fba250a14
commit 5fefe97b87
2 changed files with 21 additions and 13 deletions

View File

@ -90,10 +90,9 @@ func (c *Core) Table(tableNameQueryOrStruct ...interface{}) *Model {
// db.Model("? AS a, ? AS b", subQuery1, subQuery2)
func (c *Core) Model(tableNameQueryOrStruct ...interface{}) *Model {
var (
tableStr string
tableName string
extraArgs []interface{}
tableNames = make([]string, len(tableNameQueryOrStruct))
tableStr string
tableName string
extraArgs []interface{}
)
// Model creation with sub-query.
if len(tableNameQueryOrStruct) > 1 {
@ -106,6 +105,7 @@ func (c *Core) Model(tableNameQueryOrStruct ...interface{}) *Model {
}
// Normal model creation.
if tableStr == "" {
tableNames := make([]string, len(tableNameQueryOrStruct))
for k, v := range tableNameQueryOrStruct {
if s, ok := v.(string); ok {
tableNames[k] = s
@ -113,7 +113,6 @@ func (c *Core) Model(tableNameQueryOrStruct ...interface{}) *Model {
tableNames[k] = tableName
}
}
if len(tableNames) > 1 {
tableStr = fmt.Sprintf(
`%s AS %s`, c.QuotePrefixTableName(tableNames[0]), c.QuoteWord(tableNames[1]),
@ -145,17 +144,26 @@ func (c *Core) Raw(rawSql string, args ...interface{}) *Model {
return model
}
// Raw creates and returns a model based on a raw sql not a table.
// Example:
// db.Raw("SELECT * FROM `user` WHERE `name` = ?", "john").Scan(&result)
// See Core.Raw.
func (m *Model) Raw(rawSql string, args ...interface{}) *Model {
model := m.db.Raw(rawSql, args...)
model.db = m.db
model.tx = m.tx
return model
}
func (tx *TX) Raw(rawSql string, args ...interface{}) *Model {
return tx.Model().Raw(rawSql, args...)
}
// With creates and returns an ORM model based on meta data of given object.
func (c *Core) With(objects ...interface{}) *Model {
return c.db.Model().With(objects...)
}
// Table is alias of tx.Model.
// Deprecated, use Model instead.
func (tx *TX) Table(tableNameQueryOrStruct ...interface{}) *Model {
return tx.Model(tableNameQueryOrStruct...)
}
// Model acts like Core.Model except it operates on transaction.
// See Core.Model.
func (tx *TX) Model(tableNameQueryOrStruct ...interface{}) *Model {

View File

@ -349,7 +349,7 @@ func Test_TX_Update(t *testing.T) {
if err := tx.Commit(); err != nil {
gtest.Error(err)
}
_, err = tx.Table(table).Fields("create_time").Where("id", 3).Value()
_, err = tx.Model(table).Fields("create_time").Where("id", 3).Value()
t.AssertNE(err, nil)
if value, err := db.Model(table).Fields("create_time").Where("id", 3).Value(); err != nil {
@ -697,7 +697,7 @@ func Test_TX_Delete(t *testing.T) {
if _, err := tx.Delete(table, 1); err != nil {
gtest.Error(err)
}
if n, err := tx.Table(table).Count(); err != nil {
if n, err := tx.Model(table).Count(); err != nil {
gtest.Error(err)
} else {
t.Assert(n, 0)