# 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 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

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

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

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

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.