summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/model_table_m2m.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/model_table_m2m.go')
-rw-r--r--vendor/github.com/uptrace/bun/model_table_m2m.go22
1 files changed, 8 insertions, 14 deletions
diff --git a/vendor/github.com/uptrace/bun/model_table_m2m.go b/vendor/github.com/uptrace/bun/model_table_m2m.go
index 88d8a1268..14d385e62 100644
--- a/vendor/github.com/uptrace/bun/model_table_m2m.go
+++ b/vendor/github.com/uptrace/bun/model_table_m2m.go
@@ -24,7 +24,7 @@ var _ TableModel = (*m2mModel)(nil)
func newM2MModel(j *relationJoin) *m2mModel {
baseTable := j.BaseModel.Table()
joinModel := j.JoinModel.(*sliceTableModel)
- baseValues := baseValues(joinModel, baseTable.PKs)
+ baseValues := baseValues(joinModel, j.Relation.BasePKs)
if len(baseValues) == 0 {
return nil
}
@@ -83,27 +83,21 @@ func (m *m2mModel) Scan(src interface{}) error {
column := m.columns[m.scanIndex]
m.scanIndex++
- field, ok := m.table.FieldMap[column]
- if !ok {
+ // Base pks must come first.
+ if m.scanIndex <= len(m.rel.M2MBasePKs) {
return m.scanM2MColumn(column, src)
}
- if err := field.ScanValue(m.strct, src); err != nil {
- return err
- }
-
- for _, fk := range m.rel.M2MBaseFields {
- if fk.Name == field.Name {
- m.structKey = append(m.structKey, field.Value(m.strct).Interface())
- break
- }
+ if field, ok := m.table.FieldMap[column]; ok {
+ return field.ScanValue(m.strct, src)
}
- return nil
+ _, err := m.scanColumn(column, src)
+ return err
}
func (m *m2mModel) scanM2MColumn(column string, src interface{}) error {
- for _, field := range m.rel.M2MBaseFields {
+ for _, field := range m.rel.M2MBasePKs {
if field.Name == column {
dest := reflect.New(field.IndirectType).Elem()
if err := field.Scan(dest, src); err != nil {