feat: additional select column

This commit is contained in:
Muhammad Noor Misyuari 2023-10-26 12:47:45 +07:00
parent 5adc0ce5f6
commit 0e24da601c
3 changed files with 49 additions and 2 deletions

View File

@ -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...)

View File

@ -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()

View File

@ -31,6 +31,7 @@ type Statement struct {
BuildClauses []string
Distinct bool
Selects []string // selected columns
AdditionalSelects []clause.Column // additional selected columns
Omits []string // omit columns
Joins []join
Preloads map[string][]interface{}