在Loopback中使用include过滤器将两个模型连接起来

3

我有两个模型:Purchase 和 Products,productId 是两个模型共有的字段。

我需要通过 purchaseId 在 product 模型中查找 productDetails。

因此,在 Purchase 模型中创建了一个名为 getProductDetails 的自定义端点。

以下是我尝试查询这两个模型的方式。

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

我的关系是 Purchase 属于 Product,外键是 productId

Product 有多个 Purchase

但是即使我执行上述查询,查询结果中也没有 productDesc

我的模型关系有问题吗?

1个回答

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接