mirror of
https://gitee.com/johng/gf
synced 2026-06-06 16:21:40 +08:00
Added Order() method support for gdb.
This commit is contained in:
@ -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.
|
||||
|
||||
@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user