0
votes

I have such models:

Team

{
  "name": "Team",
  "plural": "teams",
  "base": "PersistedModel",
  "idInjection": true,
  "options": {
    "validateUpsert": true
  },
  "mixins": {
    "ModelRest": {}
  },
  "hidden": [
    "deleted"
  ],
  "filtered": [
    "userId",
    "archived"
  ],
  "properties": {
    "name": {
      "type": "string",
      "required": true
    },
    "createdAt": {
      "type": "date"
    },
    "deleted": {
      "type": "boolean"
    }
  },
  "validations": [],
  "relations": {
    "projects": {
      "type": "hasMany",
      "model": "Project"
    },
    "user": {
      "type": "belongsTo",
      "model": "user"
    },
    "users": {
      "type": "hasMany",
      "model": "User",
      "foreignKey": "",
      "through": "TeamMember"
    }
  },
  "acls": [],
  "methods": {}
}

TeamMember

{
  "name": "TeamMember",
  "plural": "team-members",
  "base": "Model",
  "idInjection": false,
  "options": {
    "validateUpsert": true
  },
  "properties": {},
  "validations": [],
  "relations": {
    "user": {
      "type": "belongsTo",
      "model": "user"
    },
    "team": {
      "type": "belongsTo",
      "model": "Team"
    }
  },
  "acls": [],
  "methods": {}
}

user

{
  "name": "user",
  "plural": "users",
  "base": "User",
  "idInjection": true,
  "mixins": {
    "ModelRest": {}
  },
  "hidden": [
    "realm",
    "emailVerified",
    "lastIP",
    "deleted",
    "utmSource",
    "utmMedium",
    "utmCampaign"
  ],
  "readOnly": [
    "statusId",
    "lastListId",
    "teamId",
    "subscriptionStart",
    "subscriptionExpiration",
    "apiKey"
  ],
  "properties": {
    "name": {
      "type": "string",
      "required": true,
      "mysql": {
        "columnName": "username"
      }
    },
    "password": {
      "type": "string",
      "required": true,
      "min": 5
    },
    "email": {
      "type": "string",
      "required": true
    },
    "createdAt": {
      "type": "date"
    },
    "updatedAt": {
      "type": "date"
    },
    "subscriptionStart": {
      "type": "date"
    },
    "subscriptionExpiration": {
      "type": "date"
    },
    "teamId": {
      "type": "number"
    },
    "sharePlan": {
      "type": "boolean"
    },
    "shareLeads": {
      "type": "boolean"
    },
    "timezone": {
      "type": "string"
    },
    "utmSource": {
      "type": "string"
    },
    "utmMedium": {
      "type": "string"
    },
    "utmCampaign": {
      "type": "string"
    },
    "lastIP": {
      "type": "string"
    },
    "deleted": {
      "type": "boolean"
    }
  },
  "validations": [],
  "relations": {
    "team": {
      "type": "belongsTo",
      "model": "Team"
    },
    "plan": {
      "type": "belongsTo",
      "model": "Plan"
    },
    "billingCycle": {
      "type": "belongsTo",
      "model": "BillingCycle"
    },
    "card": {
      "type": "belongsTo",
      "model": "Card"
    },
    "lastList": {
      "type": "belongsTo",
      "model": "List"
    },
    "status": {
      "type": "belongsTo",
      "model": "Status"
    },
    "accessTokens": {
      "type": "hasMany",
      "model": "AccessToken"
    }
  },
  "acls": [],
  "methods": {}
}

I've created relation in Team model:

"users": {
  "type": "hasMany",
  "model": "User",
  "foreignKey": "",
  "through": "TeamMember"
}

But users relation in Team doesn't work at all. In API explorer I see

GET /teams/{id}/user

there is no

GET /teams/{id}/users

Why does this happen? I've even created this relation with Loopback relation generator. Same result. Can't figure out where is the error. Loopback doest see this relation. Thanks for any help.

1
I can see the model is User, but I think you should be using user instead. Probably User model is not public and you have extended it to user. - Farid Nouri Neshat
Oh, yes, I see. But I tried before "user" and it was same result :( - Dmytro

1 Answers

0
votes

It's all, because in model-config.json I have

  "TeamMember": {
    "dataSource": null,
    "public": true
  },

instead of:

  "TeamMember": {
    "dataSource": "db",
    "public": true
  },