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

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"]}