使用包含过滤器在环回中加入两个模型

时间:2016-04-27 19:21:56

标签: javascript node.js loopbackjs

我有两个型号的购买和产品,而且productId对两者都很常见。

我需要从productId的产品型号中找到productDetails。

所以我在Purchase模型中创建了一个名为getProductDetails的自定义端点。

这就是我试图查询模型的方式。

         Purchase.find({
            "filter": {
                include: {
                    relation: 'Product',
                    scope: {
                        fields: ['productDesc'],
                    }
                }
            },
           where:{
                id:purchaseId
            },

我的关系是 购买belongsTo产品,foreignKey是productId

产品已经多次购买

但即使我执行上述查询,我​​也没有在查询结果中获得productDesc

我的模特关系错了吗?

1 个答案:

答案 0 :(得分:3)

假设产品和购买模型定义如下:

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对象。

我不确定,为什么要创建一个新的端点。环回提供的应该足够了。

e.g。

GET /Purchases/{id}/product

GET /Purchases/{id}

带过滤器

{ "include": [ "product"]}