Tip: Missing instructions for your LoopBack 3 use case? Please report a Migration docs issue on GitHub to let us know.
When you define a relation in a LoopBack 3 model JSON file, the framework will create the following artifacts for you automatically:
- Relation metadata defining the target model, foreign key column/property, and so on.
- Repository-like methods for accessing related model instance(s), for example
Category.prototype.products. - An inclusion resolver to allow clients to request relation traversal in
queries and include related models, e.g.
Product.find({include: ['category']}) - REST API endpoints for querying a modifying models on the other side of the
relation, e.g.
GET /api/categories/1/products.
In LoopBack 4, these building blocks are typically provided by the application developer.
- Relation metadata is defined via model decorators like
@hasMany. - Relation repositories implement APIs for accessing and modifying data of related models.
- Inclusion resolvers implement relation traversal in queries.
- Relation controllers implement REST APIs for model relations.
At the moment, all of these artifacts are defined via source code files which
are typically created by running lb4 relation. With source code files ready to
be edited, developers get a lot of power and flexibility in customizing the
default behavior offered by the framework.
In the future, we would like to provide a declarative approach for building model relations: the developer defines relation metadata, and the framework builds all required artifacts at runtime, similar to how LoopBack 3 works. You can join the discussion in the GitHub issue loopback-next#2483.
Migration path
Follow these steps to migrate a model relation from LoopBack 3 to LoopBack 4:
-
Make sure to complete all steps described in Migrating model definitions and built-in APIs, especially the creation of Repository classes for models on both sides of the relation.
-
Run
lb4 relationto define the model relation in your model class, generate code for the relation repository and optionally register inclusion resolver. This command will also create a new Controller class implementing public REST API for your relation.
You can learn more about lb4 relation command in
Relation generator.
Relation types
The following relations are supported by LoopBack 4 and can be migrated from LoopBack 3:
Other relations types are not supported yet, you can subscribe to our progress in the high-level tracking issue loopback-next#1450. See also issues for individual relation types as mentioned in the tracking issue, for example:
- HasAndBelongsToMany - loopback-next#2308
- Polymorphic relations - loopback-next#2487
- ReferencesMany - loopback-next#2488