使用包含过滤器在环回中加入两个模型
Joining two models in loopback using include filter
我有两个模型 Purchase 和 Products,productId 对两者都是通用的。
我需要从产品型号中找到 purchaseId 的 productDetails。
所以我在购买模型中创建了一个自定义端点,称为 getProductDetails。
这就是我尝试查询模型的方式。
Purchase.find({
"filter": {
include: {
relation: 'Product',
scope: {
fields: ['productDesc'],
}
}
},
where:{
id:purchaseId
},
我的关系是
Purchase belongsTo Product, foreignKey为productId
产品有许多购买
但是即使我做了上面的查询,我也没有在查询结果中得到 productDesc
我的模型关系错了吗?
假设产品和采购模型定义如下:
product.json
{
"name": "Product",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"productDesc": {
"type": "string",
"required": false
}
},
"validations": [],
"relations": {
"purchases": {
"type": "hasMany",
"model": "Purchase",
"foreignKey": "productId"
}
},
"acls": [],
"methods": {}
}
purchase.json
{
"name": "Purchase",
"base": "PersistedModel",
"idInjection": true,
"properties": {},
"validations": [],
"relations": {
"product": {
"type": "belongsTo",
"model": "Product",
"foreignKey": "productId"
}
},
"acls": [],
"methods": {}
}
我已将您的查询调整为:
let product = await Purchase.find({
include: {
relation: 'product',
scope: {
fields: ['productDesc']
}
},
where: {
id: 1
}
})
注意:使用了 ES6 和 ES7,但可以轻松重写为 ES5
您必须使用 toJSON 将返回的模型实例与相关项转换为普通 JSON 对象。
我不确定,但你为什么要创建一个新端点。 loopback提供的应该够用了
例如
GET /Purchases/{id}/product
或
GET /Purchases/{id}
带过滤器
{ "include": [ "product"]}
我有两个模型 Purchase 和 Products,productId 对两者都是通用的。
我需要从产品型号中找到 purchaseId 的 productDetails。
所以我在购买模型中创建了一个自定义端点,称为 getProductDetails。
这就是我尝试查询模型的方式。
Purchase.find({
"filter": {
include: {
relation: 'Product',
scope: {
fields: ['productDesc'],
}
}
},
where:{
id:purchaseId
},
我的关系是 Purchase belongsTo Product, foreignKey为productId
产品有许多购买
但是即使我做了上面的查询,我也没有在查询结果中得到 productDesc
我的模型关系错了吗?
假设产品和采购模型定义如下:
product.json
{
"name": "Product",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"productDesc": {
"type": "string",
"required": false
}
},
"validations": [],
"relations": {
"purchases": {
"type": "hasMany",
"model": "Purchase",
"foreignKey": "productId"
}
},
"acls": [],
"methods": {}
}
purchase.json
{
"name": "Purchase",
"base": "PersistedModel",
"idInjection": true,
"properties": {},
"validations": [],
"relations": {
"product": {
"type": "belongsTo",
"model": "Product",
"foreignKey": "productId"
}
},
"acls": [],
"methods": {}
}
我已将您的查询调整为:
let product = await Purchase.find({
include: {
relation: 'product',
scope: {
fields: ['productDesc']
}
},
where: {
id: 1
}
})
注意:使用了 ES6 和 ES7,但可以轻松重写为 ES5
您必须使用 toJSON 将返回的模型实例与相关项转换为普通 JSON 对象。
我不确定,但你为什么要创建一个新端点。 loopback提供的应该够用了
例如
GET /Purchases/{id}/product
或
GET /Purchases/{id}
带过滤器
{ "include": [ "product"]}