2019-05-02 16:49:13 +02:00
# Migration guide from alpha.25 to alpha.26.2
2019-04-16 11:38:59 +02:00
**Here are the major changes:**
2019-04-22 15:25:24 +02:00
- Fix some issues
2019-04-16 11:38:59 +02:00
**Useful links:**
2019-11-07 12:05:39 +01:00
2019-04-16 11:38:59 +02:00
- Changelog: [https://github.com/strapi/strapi/releases/tag/v3.0.0-alpha.26 ](https://github.com/strapi/strapi/releases/tag/v3.0.0-alpha.26 )
2019-05-02 16:49:13 +02:00
- GitHub diff: [https://github.com/strapi/strapi/compare/v3.0.0-alpha.25...v3.0.0-alpha.26.2 ](https://github.com/strapi/strapi/compare/v3.0.0-alpha.25...v3.0.0-alpha.26.2 )
2019-04-16 11:38:59 +02:00
< br >
2019-11-07 12:05:39 +01:00
::: tip
2019-04-16 11:38:59 +02:00
Feel free to [join us on Slack ](http://slack.strapi.io ) and ask questions about the migration process.
:::
< br >
## Getting started
2019-05-02 16:49:13 +02:00
Install Strapi `alpha.26.2` globally on your computer. To do so run `npm install strapi@3.0.0-alpha.26.2 -g` .
2019-04-16 11:38:59 +02:00
When it's done, generate a new empty project `strapi new myNewProject` (don't pay attention to the database configuration).
< br >
## Update node modules
2019-05-02 16:49:13 +02:00
Update the Strapi's dependencies version (move Strapi's dependencies to `3.0.0-alpha.26.2` version) of your project.
2019-04-16 11:38:59 +02:00
2019-05-02 16:49:13 +02:00
Run `npm install strapi@3.0.0-alpha.26.2 --save` to update your strapi version.
2019-04-16 11:38:59 +02:00
< br >
## Update the Admin
2019-11-07 12:05:39 +01:00
::: tip
2019-04-16 11:38:59 +02:00
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.
< br >
## Update the Plugins
2019-11-07 12:05:39 +01:00
::: tip
2019-04-16 11:38:59 +02:00
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
2019-04-16 11:46:01 +02:00
By default your generated API will not have the deep filtering feature provide by this release. You will have to make some updates.
2019-04-16 11:38:59 +02:00
2019-04-16 11:46:01 +02:00
### Updating Mongoose
2019-04-16 11:38:59 +02:00
2019-11-07 12:05:39 +01:00
**Updating your controllers**: [https://github.com/strapi/strapi/pull/2961/files#diff-008d6bf29828238415549d6caf613284 ](https://github.com/strapi/strapi/pull/2961/files#diff-008d6bf29828238415549d6caf613284 )
2019-04-16 11:38:59 +02:00
You will have to add `, next, { populate } = {}` in the arguments of the `find` function.
2019-04-16 11:46:01 +02:00
Before
2019-04-16 11:38:59 +02:00
2019-04-16 11:46:01 +02:00
```js
find: async (ctx) => {
// ...
},
```
After
```js
find: async (ctx, next, { populate } = {}) => {
// ...
},
```
**Updating your services**: [https://github.com/strapi/strapi/pull/2961/files#diff-c36b911d1bc2922e1d7cf93ae692e054 ](https://github.com/strapi/strapi/pull/2961/files#diff-c36b911d1bc2922e1d7cf93ae692e054 )
2019-04-16 11:38:59 +02:00
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.
```js
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.
```js
count: (params) => {
const filters = convertRestQueryParams(params);
return buildQuery({
model: < %= globalID %>,
filters: { where: filters.where },
})
.count();
```
And replace `<%= globalID %>` by the Global of your API.
2019-04-16 11:46:01 +02:00
## Updating Bookshelf
2019-04-16 11:38:59 +02:00
2019-04-16 11:46:01 +02:00
**Updating your controllers**: [https://github.com/strapi/strapi/pull/2961/files#diff-a2a09f28ea5f2a78c485c232dd2dbfde ](https://github.com/strapi/strapi/pull/2961/files#diff-a2a09f28ea5f2a78c485c232dd2dbfde )
2019-04-16 11:38:59 +02:00
You will have to add `, next, { populate } = {}` in the arguments of the `find` function.
2019-04-16 11:46:01 +02:00
Before
```js
find: async (ctx) => {
// ...
},
```
After
```js
find: async (ctx, next, { populate } = {}) => {
// ...
},
```
2019-04-16 11:38:59 +02:00
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.
2019-04-16 11:46:01 +02:00
**Updating your services**: [https://github.com/strapi/strapi/pull/2961/files#diff-61ba361ed6161efcd5f4e583001cc9c9 ](https://github.com/strapi/strapi/pull/2961/files#diff-61ba361ed6161efcd5f4e583001cc9c9 )
2019-04-16 11:38:59 +02:00
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.
```js
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.
```js
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.
< br >
2019-05-02 16:49:13 +02:00
That's all, you have now upgraded to Strapi `alpha.26.2` .