Andrew Duensing
Andrew Duensing

Reputation: 195

StrongLoop REST API "hasManyThrough" include filter always returns empty

Premise

Pretty short and simple. In my testing/learning environment for StrongLoop, I have set up two models: CoffeeShop and Person. Persons can have many "employers", and CoffeeShops can have many "employees". This relationship is maintained by a "hasMany"/"through" type relationship on both the CofeeShop and Person models.

Problem

When querying either model through the REST API, an include filter always returns an empty array for the associated relation, even if relations exist. In other words, the API call

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

works as expected, but

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

Does not.

Could anyone help me figure out why this is? I've attached pictures and the .json model definitions files as well.

// /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

Upvotes: 0

Views: 241

Answers (1)

Emmanuel P.
Emmanuel P.

Reputation: 1006

in your CoffeeShopPersonEmployeeEmployer Model:

add foreign keys properties:

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

and ajust the relations :

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

Upvotes: 0

Related Questions