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{})
|
||||
}
|
||||
|
||||
clauseSelect.Columns = append(clauseSelect.Columns, db.Statement.AdditionalSelects...)
|
||||
|
||||
db.Statement.AddClauseIfNotExists(clauseSelect)
|
||||
|
||||
db.Statement.Build(db.Statement.BuildClauses...)
|
||||
|
@ -173,6 +173,50 @@ func (db *DB) Select(query interface{}, args ...interface{}) (tx *DB) {
|
||||
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
|
||||
func (db *DB) Omit(columns ...string) (tx *DB) {
|
||||
tx = db.getInstance()
|
||||
|
@ -30,8 +30,9 @@ type Statement struct {
|
||||
Clauses map[string]clause.Clause
|
||||
BuildClauses []string
|
||||
Distinct bool
|
||||
Selects []string // selected columns
|
||||
Omits []string // omit columns
|
||||
Selects []string // selected columns
|
||||
AdditionalSelects []clause.Column // additional selected columns
|
||||
Omits []string // omit columns
|
||||
Joins []join
|
||||
Preloads map[string][]interface{}
|
||||
Settings sync.Map
|
||||
|
Loading…
x
Reference in New Issue
Block a user