Package Exports
- @loopback/sequelize
- @loopback/sequelize/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@loopback/sequelize) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
@loopback/sequelize
This is a loopback4 extension that provides Sequelize's query builder at
repository level in any loopback 4 application. It has zero learning curve as it
follows similar interface as DefaultCrudRepository. For relational databases,
Sequelize is a popular ORM of choice.
For pending features, refer to the Limitations section below.
Stability: ⚠️Experimental⚠️
Experimental packages provide early access to advanced or experimental functionality to get community feedback. Such modules are published to npm using
0.x.yversions. Their APIs and functionality may be subject to breaking changes in future releases.
Installation
To install this extension in your Loopback 4 project, run the following command:
npm install @loopback/sequelizeYou'll also need to install the driver for your preferred database:
# One of the following:
npm install --save pg pg-hstore # Postgres
npm install --save mysql2
npm install --save mariadb
npm install --save sqlite3
npm install --save tedious # Microsoft SQL Server
npm install --save oracledb # Oracle DatabaseUsage
You can watch a video overview of this extension by clicking here.
Both newly developed and existing projects can benefit from the extension by simply changing the parent classes in the target Data Source and Repositories.
Step 1: Configure DataSource
Change the parent class from juggler.DataSource to SequelizeDataSource like
below.
// ...
import {SequelizeDataSource} from '@loopback/sequelize';
// ...
export class PgDataSource
extends SequelizeDataSource
implements LifeCycleObserver {
// ...
}Step 2: Configure Repository
Change the parent class from DefaultCrudRepository to
SequelizeCrudRepository like below.
// ...
import {SequelizeCrudRepository} from '@loopback/sequelize';
export class YourRepository extends SequelizeCrudRepository<
YourModel,
typeof YourModel.prototype.id,
YourModelRelations
> {
// ...
}Relations
Supported Loopback Relations
With SequelizeCrudRepository, you can utilize following relations without any
additional configuration:
The default relation configuration, generated using the lb4 relation command (i.e. inclusion resolvers in the repository and property decorators in the model), remain unchanged.
INNER JOIN
Check the demo video of using inner joins here: https://youtu.be/ZrUxIk63oRc?t=76
When using SequelizeCrudRepository, the find(), findOne(), and
findById() methods accept a new option called required in the include
filter. Setting this option to true will result in an inner join query that
explicitly requires the specified condition for the child model. If the row does
not meet this condition, it will not be fetched and returned.
An example of the filter object might look like this to fetch the books who contains "Art" in their title, which belongs to category "Programming":
{
"where": {"title": {"like": "%Art%"}},
"include": [
{
"relation": "category",
"scope": {
"where": {
"name": "Programming"
}
},
"required": true // 👈
}
]
}Debug strings reference
There are three built-in debug strings available in this extension to aid in debugging. To learn more about how to use them, see this page.
| String | Description |
|---|---|
| Datasource | |
| loopback:sequelize:datasource | Database Connections logs |
| loopback:sequelize:queries | Logs Executed SQL Queries and Parameters |
| Repository | |
| loopback:sequelize:modelbuilder | Logs Translation of Loopback Models Into Sequelize Supported Definitions. Helpful When Debugging Datatype Issues |
Limitations
Please note, the current implementation does not support the following:
- SQL Transactions.
- Loopback Migrations (via default
migrate.ts). Though you're good if using external packages likedb-migrate. - Connection Pooling is not implemented yet.
Community contribution is welcome.
Contributions
Tests
Run npm test from the root folder.
Contributors
See all contributors.