# Migration guide from alpha.12.1 to alpha.12.2
Here are the major changes:
- Update relation management
- Fix many bugs and enhancement
Usefull links:
- Change log: https://github.com/strapi/strapi/releases/tag/v3.0.0-alpha.12.2 (opens new window)
- GitHub diff: https://github.com/strapi/strapi/compare/v3.0.0-alpha.12.1.3...v3.0.0-alpha.12.2 (opens new window)
馃挕 TIP
Feel free to join us on Slack (opens new window) and ask questions about the migration process.
# Getting started
Install Strapi alpha.12.2
globally on your computer. To do so run npm install strapi@3.0.0-alpha.12.2 -g
.
When it's done, generate a new empty project strapi new myNewProject
(don't pay attention to the database configuration).
# Update node modules
Update the Strapi's dependencies version (move Strapi's dependencies to 3.0.0-alpha.12.2
version) of your project.
Run npm install strapi@3.0.0-alpha.12.2 --save
to update your strapi version and then run the same command for strapi-mongoose
or strapi-bookshelf
depending of the module you use in your application.
# Update the Admin
馃挕 TIP
If you did custom update of the admin, you will have to manually migrate your update.
Delete your old admin folder and replace it by the new one.
# Update the Plugins
馃挕 TIP
If you did custom update on one of the plugin, you will have to manually migrate your update.
Copy the fields and relations you had in your /plugins/users-permissions/models/User.settings.json
and /plugins/users-permissions/config/jwt.json
file in the new one.
Then, delete your old plugins
folder and replace it by the new one.
# 鈿狅笍 Update API services
You will have to update services of you generated API.
Replace Article
by your Content Type name in each functions.
For add
function:
add: async (values) => {
// Extract values related to relational data.
const relations = _.pick(values, Article.associations.map(ast => ast.alias));
const data = _.omit(values, Article.associations.map(ast => ast.alias));
// Create entry with no-relational data.
const entry = await Article.create(data);
// Create relational data and return the entry.
return Article.updateRelations({ id: entry.id, values: relations });
},
For edit
function:
edit: async (params, values) => {
// Extract values related to relational data.
const relations = _.pick(values, Article.associations.map(a => a.alias));
const data = _.omit(values, Article.associations.map(a => a.alias));
// Update entry with no-relational data.
const entry = await Article.update(params, data, { multi: true });
// Update relational data and return the entry.
return Article.updateRelations(Object.assign(params, { values: relations }));
},
For remove
function:
remove: async params => {
// Select field to populate.
const populate = Article.associations
.filter(ast => ast.autoPopulate !== false)
.map(ast => ast.alias)
.join(' ');
// Note: To get the full response of Mongo, use the `remove()` method
// or add spent the parameter `{ passRawResult: true }` as second argument.
const data = await Article.findOneAndRemove(params, {}).populate(populate);
if (!data) {
return data;
}
await Promise.all(
Article.associations.map(async association => {
const search =
_.endsWith(association.nature, 'One') || association.nature === 'oneToMany'
? { [association.via]: data._id }
: { [association.via]: { $in: [data._id] } };
const update =
_.endsWith(association.nature, 'One') || association.nature === 'oneToMany'
? { [association.via]: null }
: { $pull: { [association.via]: data._id } };
// Retrieve model.
const model = association.plugin
? strapi.plugins[association.plugin].models[association.model || association.collection]
: strapi.models[association.model || association.collection];
return model.update(search, update, { multi: true });
})
);
return data;
};
That's all, you have now upgraded to Strapi alpha.12.2
.