loopback-filter-by-relations-mixin
Version:
Loopback mixin that supports filtering using nested 'where' conditions for relations
126 lines (106 loc) • 2.52 kB
Markdown
[![NPM version][npm-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-downloads-url]
[](https://travis-ci.com/yuranevmer/loopback-filter-by-relations-mixin)
[](https://coveralls.io/github/yuranevmer/loopback-filter-by-relations-mixin)
- filter items by properties in related models
- supports 'hasMany', 'hasManyThrough', 'belongsTo' relations
- works with nested relations
- use as mixin
```bash
npm install loopback-filter-by-relations-mixin --save
```
Add the mixins property to your server/model-config.json like the following:
```json
{
"_meta": {
"sources": [
"loopback/common/models",
"loopback/server/models",
"../common/models",
"./models"
],
"mixins": [
"loopback/common/mixins",
"../common/mixins",
"../node_modules/loopback-filter-by-relations-mixin"
]
}
}
```
To use with your Models add the mixins attribute to the definition object of your model config.
```json
{
"name": "Customer",
"mixins": {
"FilterByRelations": true
},
"relations": {
"orders": {
"type": "hasMany",
"model": "Order",
"foreignKey": "customerId"
}
},
"properties": {
"id": "Number",
"name": "String",
"age": "Number"
}
}
```
```json
{
"name": "Order",
"mixins": {
"FilterByRelations": true
},
"relations": {
"customer": {
"type": "belongsTo",
"model": "Customer",
"foreignKey": "customerId"
}
},
"properties": {
"id": "Number",
"name": "String",
"price": "Number",
"customerId": "Number"
}
}
```
Then use in you queries like:
```json
{
"where": {
"<RelationName>": "<WhereCondition>"
}
}
```
```js
Customer.find({
where: {
orders: {
price: { gt: 1000 }
}
}
}
```
```js
Order.find({
where: {
customer: {
age: { gte: 18 }
}
}
});
```
[](LICENSE)
[]: https://img.shields.io/npm/v/loopback-filter-by-relations-mixin.svg
[]: https://npmjs.org/package/loopback-filter-by-relations-mixin
[]: https://img.shields.io/npm/dm/loopback-filter-by-relations-mixin.svg
[]: https://npmjs.org/package/loopback-filter-by-relations-mixin