I’ve been working with a custom module that has a widget with some fields stored in the DB. I added a new non-required field to the widget and a corresponding field in the database is not being added. What’s the best way to handle this type of change?
I can manually add a field in the dev database to match it, but this is unrealistic for 50 some odd production tenant sites.
To expand on @Bertand’s answer a little, you don’t need to create database columns when you add fields (Boolean Field, Text Field, Media Picker Field etc) to content parts because the database structure for storing fields is already in place in the database.
Fields are stored as serialized XML against the content part. All of my records are stored in the
Orchard_Framework_ContentItemVersionRecordtable (there’s a similar tableOrchard_Framework_ContentItemRecord, but that doesn’t appear to be used.The XML is essentially of the format:
So, for example you might have something like this:
Orchard uses the information from the
Settings_XXXRecordtables to determine the types of the fields when it’s deserializing them back from the database.All of this is why, as Bertand says here, fields are easier to create, but harder to query.
Looking at the solution you’ve posted, it looks like you’re adding custom columns, rather than Orchard Fields. If this is what you’re trying to do, then it seems like something you should be doing in a datamigration for your module by using AddColumn, as described here. This would look something like: