feat: additional select column
This commit is contained in:
parent
5adc0ce5f6
commit
0e24da601c
@ -259,6 +259,8 @@ func BuildQuerySQL(db *gorm.DB) {
|
|||||||
db.Statement.AddClauseIfNotExists(clause.From{})
|
db.Statement.AddClauseIfNotExists(clause.From{})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clauseSelect.Columns = append(clauseSelect.Columns, db.Statement.AdditionalSelects...)
|
||||||
|
|
||||||
db.Statement.AddClauseIfNotExists(clauseSelect)
|
db.Statement.AddClauseIfNotExists(clauseSelect)
|
||||||
|
|
||||||
db.Statement.Build(db.Statement.BuildClauses...)
|
db.Statement.Build(db.Statement.BuildClauses...)
|
||||||
|
@ -173,6 +173,50 @@ func (db *DB) Select(query interface{}, args ...interface{}) (tx *DB) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AdditionalSelect specify fields that you want when querying
|
||||||
|
//
|
||||||
|
// Use AdditionalSelect when you want add a subset of the fields. By default, GORM will select all fields.
|
||||||
|
// AdditionalSelect accepts both string arguments and arrays.
|
||||||
|
//
|
||||||
|
// // Select name and age of user using multiple arguments
|
||||||
|
// db.AdditionalSelect(clause.Column{
|
||||||
|
// Table: "users",
|
||||||
|
// Name: "id",
|
||||||
|
// Alias: "user_id",
|
||||||
|
// }, clause.Column{
|
||||||
|
// Table: "users",
|
||||||
|
// Name: "name",
|
||||||
|
// Alias: "user_name",
|
||||||
|
// }).Find(&users)
|
||||||
|
// // Select name and age of user using an array
|
||||||
|
// db.AdditionalSelect([]clause.Column{
|
||||||
|
// {
|
||||||
|
// Table: "users",
|
||||||
|
// Name: "id",
|
||||||
|
// Alias: "user_id",
|
||||||
|
// },
|
||||||
|
// {
|
||||||
|
// Table: "users",
|
||||||
|
// Name: "name",
|
||||||
|
// Alias: "user_name",
|
||||||
|
// },
|
||||||
|
// }).Find(&users)
|
||||||
|
func (db *DB) AdditionalSelect(selects interface{}) (tx *DB) {
|
||||||
|
tx = db.getInstance()
|
||||||
|
|
||||||
|
switch v := selects.(type) {
|
||||||
|
case []clause.Column:
|
||||||
|
tx.Statement.AdditionalSelects = v
|
||||||
|
|
||||||
|
case clause.Column:
|
||||||
|
tx.Statement.AdditionalSelects = []clause.Column{v}
|
||||||
|
default:
|
||||||
|
tx.AddError(fmt.Errorf("unsupported additional select args %v", selects))
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// Omit specify fields that you want to ignore when creating, updating and querying
|
// Omit specify fields that you want to ignore when creating, updating and querying
|
||||||
func (db *DB) Omit(columns ...string) (tx *DB) {
|
func (db *DB) Omit(columns ...string) (tx *DB) {
|
||||||
tx = db.getInstance()
|
tx = db.getInstance()
|
||||||
|
@ -30,8 +30,9 @@ type Statement struct {
|
|||||||
Clauses map[string]clause.Clause
|
Clauses map[string]clause.Clause
|
||||||
BuildClauses []string
|
BuildClauses []string
|
||||||
Distinct bool
|
Distinct bool
|
||||||
Selects []string // selected columns
|
Selects []string // selected columns
|
||||||
Omits []string // omit columns
|
AdditionalSelects []clause.Column // additional selected columns
|
||||||
|
Omits []string // omit columns
|
||||||
Joins []join
|
Joins []join
|
||||||
Preloads map[string][]interface{}
|
Preloads map[string][]interface{}
|
||||||
Settings sync.Map
|
Settings sync.Map
|
||||||
|
Loading…
x
Reference in New Issue
Block a user