mirror of
https://gitee.com/johng/gf.git
synced 2024-11-29 18:57:44 +08:00
19779cd342
Co-authored-by: longl <longlei@dealmap.cloud>
78 lines
1.8 KiB
Go
78 lines
1.8 KiB
Go
// Copyright GoFrame Author(https://goframe.org). All Rights Reserved.
|
|
//
|
|
// This Source Code Form is subject to the terms of the MIT License.
|
|
// If a copy of the MIT was not distributed with this file,
|
|
// You can obtain one at https://github.com/gogf/gf.
|
|
|
|
package gdb
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/gogf/gf/v2/text/gstr"
|
|
"github.com/gogf/gf/v2/util/gconv"
|
|
)
|
|
|
|
// Order sets the "ORDER BY" statement for the model.
|
|
//
|
|
// Eg:
|
|
// Order("id desc")
|
|
// Order("id", "desc").
|
|
// Order("id desc,name asc")
|
|
// Order("id desc").Order("name asc")
|
|
// Order(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 += ","
|
|
}
|
|
for _, v := range orderBy {
|
|
switch v.(type) {
|
|
case Raw, *Raw:
|
|
model.orderBy += gconv.String(v)
|
|
return model
|
|
}
|
|
}
|
|
model.orderBy += model.db.GetCore().QuoteString(gstr.JoinAny(orderBy, " "))
|
|
return model
|
|
}
|
|
|
|
// OrderAsc sets the "ORDER BY xxx ASC" statement for the model.
|
|
func (m *Model) OrderAsc(column string) *Model {
|
|
if len(column) == 0 {
|
|
return m
|
|
}
|
|
return m.Order(column + " ASC")
|
|
}
|
|
|
|
// OrderDesc sets the "ORDER BY xxx DESC" statement for the model.
|
|
func (m *Model) OrderDesc(column string) *Model {
|
|
if len(column) == 0 {
|
|
return m
|
|
}
|
|
return m.Order(column + " DESC")
|
|
}
|
|
|
|
// OrderRandom sets the "ORDER BY RANDOM()" statement for the model.
|
|
func (m *Model) OrderRandom() *Model {
|
|
model := m.getModel()
|
|
model.orderBy = "RAND()"
|
|
return model
|
|
}
|
|
|
|
// Group sets the "GROUP BY" statement for the model.
|
|
func (m *Model) Group(groupBy ...string) *Model {
|
|
if len(groupBy) == 0 {
|
|
return m
|
|
}
|
|
model := m.getModel()
|
|
if model.groupBy != "" {
|
|
model.groupBy += ","
|
|
}
|
|
model.groupBy += model.db.GetCore().QuoteString(strings.Join(groupBy, ","))
|
|
return model
|
|
}
|