Utilize schema Macros
- Watch meet SwiftData and How to build an App with SwiftData
- Sample trip app is used with multiple relationships against the main @Model class
- Schema Macros allow you to customize the behavior of Schemas
- @Attribute(.unique) – allows for making a value is Unique – this will cause an update instead of a new items
- You can provide constrains on primitive value types, (Numeric, String, or UUID)
- You can also decorate a To-One relationship
- To rename a variable – it will be seen as a new property so you can use @Attribute(originalName: “old_name”) var newName: String
- This will ensure a simple migration
- @Attribute also provides support for External Data, Transformable, Spotlight Integration and Has Modifier
- Working with Relationship – will auto setup implicit inverse relationships with default delete rule, You can add @RElationship(.cascade) to delete them verses, just nulling them out.
- To add non-persistent – just add @Transient and the value will be calculated at use time, must have a default logical
Evolving schemas
- To handle updates to your schemas between releases, you use VersionSchema to define distinct releases
- See SchemaMigrationPlan to do ordering of all updates needed to migrate the data
- Define each migration phase – either Lightweight (which requires no code), or Custom (which requires you to write code for things like-dedupe.
- Annotate migrations so that when you build your plan, it will do the migration for you
- You setup the Model with current Schema and a Migration plan in your app and it will upgrade data when needed.