added migration to copy existing DisplayFields to the new Presentable field
This commit is contained in:
		
							parent
							
								
									864bbe7e12
								
							
						
					
					
						commit
						26fd3d48df
					
				| 
						 | 
					@ -0,0 +1,62 @@
 | 
				
			||||||
 | 
					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)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue