# Migration guide from alpha.25 to alpha.26.2

Here are the major changes:

  • Fix some issues

Useful links:


💡 TIP

Feel free to join us on Slack (opens new window) and ask questions about the migration process.


# Getting started

Install Strapi alpha.26.2 globally on your computer. To do so run npm install strapi@3.0.0-alpha.26.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.26.2 version) of your project.

Run npm install strapi@3.0.0-alpha.26.2 --save to update your strapi version.


# Update the Admin

💡 TIP

If you performed updates in the Admin, you will have to manually migrate your changes.

Delete your old admin folder and replace it with the new one.


# Update the Plugins

💡 TIP

If you did a custom update on one of the plugins, 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 with the new one.

# Add deep filtering feature

By default your generated API will not have the deep filtering feature provide by this release. You will have to make some updates.

# Updating Mongoose

Updating your controllers: https://github.com/strapi/strapi/pull/2961/files#diff-008d6bf29828238415549d6caf613284 (opens new window)

You will have to add , next, { populate } = {} in the arguments of the find function.

Before

find: async (ctx) => {
  // ...
},

After

find: async (ctx, next, { populate } = {}) => {
  // ...
},

Updating your services: https://github.com/strapi/strapi/pull/2961/files#diff-c36b911d1bc2922e1d7cf93ae692e054 (opens new window)

You will have to add this requirement on the top of you file const { convertRestQueryParams, buildQuery } = require('strapi-utils');

Replace the fetchAll function by the following code.

fetchAll: (params, populate) => {
  const filters = convertRestQueryParams(params);

  const populateOpt = populate || <%= globalID %>.associations
    .filter(ast => ast.autoPopulate !== false)
    .map(ast => ast.alias);

  return buildQuery({
    model: <%= globalID %>,
    filters,
    populate: populateOpt,
  });
},

Replace the count function by the following code.

count: (params) => {
  const filters = convertRestQueryParams(params);

  return buildQuery({
    model: <%= globalID %>,
    filters: { where: filters.where },
  })
    .count();

And replace <%= globalID %> by the Global of your API.

# Updating Bookshelf

Updating your controllers: https://github.com/strapi/strapi/pull/2961/files#diff-a2a09f28ea5f2a78c485c232dd2dbfde (opens new window)

You will have to add , next, { populate } = {} in the arguments of the find function.

Before

find: async (ctx) => {
  // ...
},

After

find: async (ctx, next, { populate } = {}) => {
  // ...
},

Send this new argument in the service function.

Before return strapi.services.<%= id %>.fetchAll(ctx.query); After: return strapi.services.<%= id %>.fetchAll(ctx.query, populate);

It will be the same update for the count function.

Updating your services: https://github.com/strapi/strapi/pull/2961/files#diff-61ba361ed6161efcd5f4e583001cc9c9 (opens new window)

You will have to add this requirement on the top of you file const { convertRestQueryParams, buildQuery } = require('strapi-utils');

Replace the fetchAll function by the following code.

fetchAll: (params, populate) => {
  // Select field to populate.
  const withRelated = populate || <%= globalID %>.associations
    .filter(ast => ast.autoPopulate !== false)
    .map(ast => ast.alias);

  const filters = convertRestQueryParams(params);

  return <%= globalID %>.query(buildQuery({ model: <%= globalID %>, filters }))
    .fetchAll({ withRelated })
    .then(data => data.toJSON());
},

Replace the count function by the following code.

count: (params) => {
  // Convert `params` object to filters compatible with Bookshelf.
  const filters = convertRestQueryParams(params);

  return <%= globalID %>.query(buildQuery({ model: <%= globalID %>, filters: _.pick(filters, 'where') })).count();
},

And replace <%= globalID %> by the Global of your API.


That's all, you have now upgraded to Strapi alpha.26.2.