mirror of
https://github.com/pocketbase/pocketbase.git
synced 2024-11-29 02:12:14 +02:00
63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
package migrations
|
|
|
|
import (
|
|
"github.com/pocketbase/dbx"
|
|
"github.com/pocketbase/pocketbase/daos"
|
|
"github.com/pocketbase/pocketbase/models"
|
|
"github.com/pocketbase/pocketbase/models/schema"
|
|
)
|
|
|
|
// Copy the now deprecated RelationOptions.DisplayFields values from
|
|
// all relation fields and register its value as Presentable under
|
|
// the specific field in the related collection.
|
|
//
|
|
// If there is more than one relation to a single collection with explicitly
|
|
// set DisplayFields only one of the configuration will be copied.
|
|
func init() {
|
|
AppMigrations.Register(func(db dbx.Builder) error {
|
|
dao := daos.New(db)
|
|
|
|
collections := []*models.Collection{}
|
|
if err := dao.CollectionQuery().All(&collections); err != nil {
|
|
return err
|
|
}
|
|
|
|
indexedCollections := make(map[string]*models.Collection, len(collections))
|
|
for _, collection := range collections {
|
|
indexedCollections[collection.Id] = collection
|
|
}
|
|
|
|
for _, collection := range indexedCollections {
|
|
for _, f := range collection.Schema.Fields() {
|
|
if f.Type != schema.FieldTypeRelation {
|
|
continue
|
|
}
|
|
|
|
options, ok := f.Options.(*schema.RelationOptions)
|
|
if !ok || len(options.DisplayFields) == 0 {
|
|
continue
|
|
}
|
|
|
|
relCollection, ok := indexedCollections[options.CollectionId]
|
|
if !ok {
|
|
continue
|
|
}
|
|
|
|
for _, name := range options.DisplayFields {
|
|
relField := relCollection.Schema.GetFieldByName(name)
|
|
if relField != nil {
|
|
relField.Presentable = true
|
|
}
|
|
}
|
|
|
|
// only raw model save
|
|
if err := dao.Save(relCollection); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}, nil)
|
|
}
|