Added Order() method support for gdb.

This commit is contained in:
fanwei
2021-12-22 20:51:03 +08:00
parent aabc1f8322
commit b39b2374c4
2 changed files with 27 additions and 5 deletions

View File

@ -6,24 +6,37 @@
package gdb
import "strings"
import (
"github.com/gogf/gf/v2/util/gconv"
"strings"
)
// Order sets the "ORDER BY" statement for the model.
//
// Eg:
// Order("id desc")
// Order("id", "desc")
// Order("id desc,name asc").
func (m *Model) Order(orderBy ...string) *Model {
// Order("id", "desc",gdb.Raw("field(id, 3,1,2)"))
func (m *Model) Order(orderBy ...interface{}) *Model {
if len(orderBy) == 0 {
return m
}
model := m.getModel()
if model.orderBy != "" {
model.orderBy += ","
}
model.orderBy = model.db.GetCore().QuoteString(strings.Join(orderBy, " "))
return model
for _, o := range orderBy {
switch o.(type) {
case Raw:
model.orderBy += gconv.String(o)
default:
model.orderBy += model.db.GetCore().QuoteString(gconv.String(o))
}
}
return m
}
// OrderAsc sets the "ORDER BY xxx ASC" statement for the model.

View File

@ -1091,6 +1091,15 @@ func Test_Model_OrderBy(t *testing.T) {
t.Assert(len(result), TableSize)
t.Assert(result[0]["nickname"].String(), "name_1")
})
gtest.C(t, func(t *gtest.T) {
result, err := db.Model(table).Order(gdb.Raw("field(id, 10,1,2,3,4,5,6,7,8,9)")).All()
t.AssertNil(err)
t.Assert(len(result), TableSize)
t.Assert(result[0]["nickname"].String(), "name_10")
t.Assert(result[1]["nickname"].String(), "name_1")
t.Assert(result[2]["nickname"].String(), "name_2")
})
}
func Test_Model_GroupBy(t *testing.T) {