@@ -23,6 +23,7 @@ import (
2323 databasedriver "github.com/goravel/framework/database/driver"
2424 "github.com/goravel/framework/database/utils"
2525 "github.com/goravel/framework/errors"
26+ "github.com/goravel/framework/support/collect"
2627 "github.com/goravel/framework/support/database"
2728 "github.com/goravel/framework/support/deep"
2829)
@@ -120,7 +121,7 @@ func (r *Query) Commit() error {
120121}
121122
122123func (r * Query ) Count () (int64 , error ) {
123- query := r .addGlobalScopes ().buildConditions ()
124+ query := r .resetSelect (). addGlobalScopes ().buildConditions ()
124125
125126 var count int64
126127
@@ -621,26 +622,24 @@ func (r *Query) OrWhere(query any, args ...any) contractsorm.Query {
621622}
622623
623624func (r * Query ) Paginate (page , limit int , dest any , total * int64 ) error {
624- query := r .dest (dest ).addGlobalScopes ().buildConditions ()
625-
626625 offset := (page - 1 ) * limit
627626 if total != nil {
628- if query .conditions .table == nil && query .conditions .model == nil {
629- count , err := query .Model (dest ).Count ()
627+ if r .conditions .table == nil && r .conditions .model == nil {
628+ count , err := r .Model (dest ).Count ()
630629 if err != nil {
631630 return err
632631 }
633632 * total = count
634633 } else {
635- count , err := query .Count ()
634+ count , err := r .Count ()
636635 if err != nil {
637636 return err
638637 }
639638 * total = count
640639 }
641640 }
642641
643- return query .Offset (offset ).Limit (limit ).Find (dest )
642+ return r .Offset (offset ).Limit (limit ).Find (dest )
644643}
645644
646645func (r * Query ) Pluck (column string , dest any ) error {
@@ -780,7 +779,15 @@ func (r *Query) Scopes(funcs ...func(contractsorm.Query) contractsorm.Query) con
780779
781780func (r * Query ) Select (columns ... string ) contractsorm.Query {
782781 conditions := r .conditions
783- conditions .selectColumns = columns
782+ conditions .selectColumns = append (conditions .selectColumns , columns ... )
783+ conditions .selectColumns = collect .Unique (conditions .selectColumns )
784+
785+ // * may be added along with other columns, remove it.
786+ if len (conditions .selectColumns ) > 1 {
787+ conditions .selectColumns = collect .Filter (conditions .selectColumns , func (column string , _ int ) bool {
788+ return column != "*"
789+ })
790+ }
784791
785792 return r .setConditions (conditions )
786793}
@@ -1783,6 +1790,13 @@ func (r *Query) refreshConnection() (*Query, error) {
17831790 return query , nil
17841791}
17851792
1793+ func (r * Query ) resetSelect () * Query {
1794+ conditions := r .conditions
1795+ conditions .selectColumns = nil
1796+
1797+ return r .setConditions (conditions )
1798+ }
1799+
17861800func (r * Query ) restored (dest any ) error {
17871801 return r .event (contractsorm .EventRestored , r .conditions .model , dest )
17881802}
0 commit comments