【问题标题】:StrongLoop REST API "hasManyThrough" include filter always returns emptyStrongLoop REST API“hasManyThrough”包含过滤器总是返回空
【发布时间】:2016-06-06 16:59:15
【问题描述】:

前提

非常简短。在我的 StrongLoop 测试/学习环境中,我设置了两个模型:CoffeeShop 和 Person。个人可以有很多“雇主”,CoffeeShops 可以有很多“员工”。这种关系由 CofeeShop 和 Person 模型上的“hasMany”/“through”类型关系维护。

问题

通过 REST API 查询任一模型时,包含过滤器始终为关联关系返回一个空数组,即使关系存在。换句话说,API 调用

http://localhost:3000/api/CoffeeShops/67/employees

按预期工作,但是

GET: http://localhost:3000/api/CoffeeShops/67/?filter={"include":["employees"]}

没有。

谁能帮我弄清楚这是为什么?我还附上了图片和 .json 模型定义文件。

// /common/models/coffee-shop.json

{
  "name": "CoffeeShop",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    },
    "city": {
      "type": "string",
      "required": true
    },
    "numberEmployees": {
      "type": "number"
    },
    "ownerId": {
      "type": "number"
    },
    "isSmallBusiness": {
      "type": "boolean"
    }
  },
  "validations": [],
  "relations": {
    "owner": {
      "type": "belongsTo",
      "model": "Person",
      "foreignKey": ""
    },
    "employees": {
      "type": "hasMany",
      "model": "Person",
      "foreignKey": "employerId",
      "through": "CoffeeShopPersonEmployeeEmployer"
    }
  },
  "acls": [],
  "methods": {}
}

// /omon/models/person.json
{
  "name": "Person",
  "plural": "Persons",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {
    "name": {
      "type": "string",
      "required": true
    },
    "age": {
      "type": "number"
    }
  },
  "validations": [],
  "relations": {
    "shops": {
      "type": "hasMany",
      "model": "CoffeeShop",
      "foreignKey": "ownerId"
    },
    "employers": {
      "type": "hasMany",
      "model": "CoffeeShop",
      "foreignKey": "employeeId",
      "through": "CoffeeShopPersonEmployeeEmployer"
    }
  },
  "acls": [],
  "methods": {}
}

// /common/models/coffee-shop-person-employee-employer.json
{
  "name": "CoffeeShopPersonEmployeeEmployer",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "person": {
      "type": "belongsTo",
      "model": "Person",
      "foreignKey": "employeeId"
    },
    "coffeeShop": {
      "type": "belongsTo",
      "model": "CoffeeShop",
      "foreignKey": "employerId"
    }
  },
  "acls": [],
  "methods": {}
}

Images of REST requests

【问题讨论】:

    标签: node.js loopbackjs strongloop


    【解决方案1】:

    在您的 CoffeeShopPersonEmployeeEmployer 模型中:

    添加外键属性:

    "properties": {
        "CoffeeShopId": {
          "type": "number",
          "required": true
        },
        "PersonId": {
          "type": "number",
          "required": true
        }
    }
    

    并调整关系:

    "relations": {
        "person": {
          "type": "belongsTo",
          "model": "Person",
          "foreignKey": "PersonId"
        },
        "coffeeShop": {
          "type": "belongsTo",
          "model": "CoffeeShop",
          "foreignKey": "CoffeeShopId"
        }
    }
    

    【讨论】:

    • 感谢您的回答。我已经实现了您的解决方案,并更新了相应的数据库表,但结果行为仍然相同。
    猜你喜欢
    • 2017-08-24
    • 2016-06-14
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2020-09-26
    • 1970-01-01
    相关资源
    最近更新 更多