2016-03-16 3 views
1

У меня есть таблица компаний, таблица адресов и таблица businessadresses для нормализации отношения многих к многим. Loopback работает отлично, чтобы добавить компанию, добавить адрес в компанию, и я даже могу запросить с помощью API explorer адрес, связанный с компанией, используя метод POST/Companies/{id}/addresses/{fk}.Имеет много сквозных отношений, count всегда возвращает 0

Однако, когда я пытаюсь получить все адреса, связанные с компанией (GET/Companies/{id}/addresses), я возвращаю пустой массив. Кроме того, когда я выполняю подсчет количества адресов конкретной компании (GET/Companies/{id}/addresses/count), я всегда получаю 0.

Уверен, что мне не хватает чего-то действительно крошечного. Мой источник данных - postgresql.

/* ----- common/models/companies.json ----- */ 

{ 
    "name": "Companies", 
    "base": "User", 
    "strict": true, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
     "companyName": { 
     "type": "string", 
     "required": true 
    }, 
    "firstName": { 
    "type": "string", 
    "required": true 
    }, 
    "lastName": { 
     "type": "string", 
     "required": true 
    }, 
    "cellNumber": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "addresses": { 
     "type": "hasMany", 
     "model": "Addresses", 
     "foreignKey": "addressesid", 
     "through": "CompaniesAddresses" 
    } 
    }, 
    "acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "DENY" 
    }, 
    { 
     "accessType": "EXECUTE", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW", 
     "property": "create" 
    }, 
    { 
     "accessType": "READ", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW" 
    }, 
    { 
     "accessType": "WRITE", 
     "principalType": "ROLE", 
     "principalId": "$owner", 
     "permission": "ALLOW" 
    } 
    ], 
    "methods": {} 

/* ---- common/models/addresses.json ---- */ 

{ 
    "name": "Addresses", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "streetaddress2": { 
     "type": "string" 
    }, 
    "phonenumber2": { 
     "type": "string" 
    }, 
    "phonenumber1": { 
     "type": "string", 
     "required": true 
    }, 
    "zippostalcode": { 
     "type": "string", 
     "required": true 
    }, 
    "stateprov": { 
     "type": "string", 
     "required": true 
    }, 
    "streetaddress1": { 
     "type": "string", 
     "required": true 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "companies": { 
     "type": "hasMany", 
     "model": "Companies", 
     "foreignKey": "companiesid", 
     "through": "CompaniesAddresses" 
    } 
    }, 
    "acls": [ 
     { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW" 
    } 
    ], 
    "methods": {} 

/* ---- companiesaddresses.json ---- */ 
{ 
    "name": "CompaniesAddresses", 
    "base": "PersistedModel", 
    "strict": true, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "companiesid": { 
     "type": "number", 
     "id": true, 
     "required": true 
    }, 
    "addressesid": { 
     "type": "number", 
     "id": true, 
     "required": true 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "addresses": { 
     "type": "belongsTo", 
     "model": "Addresses", 
     "foreignKey": "addressesid" 
    }, 
    "companies": { 
     "type": "belongsTo", 
     "model": "Companies", 
     "foreignKey": "companiesid" 
    } 
    }, 
    "acls": [ 
    { 
     "accessType": "*", 
     "principalType": "ROLE", 
     "principalId": "$everyone", 
     "permission": "ALLOW" 
    } 
    ], 
    "methods": {} 
} 

/* ---- server/boot/model-config.json ---- */ 

{ 
    "_meta": { 
    "sources": [ 
     "loopback/common/models", 
     "loopback/server/models", 
     "../common/models", 
     "./models" 
    ], 
    "mixins": [ 
     "loopback/common/mixins", 
     "loopback/server/mixins", 
     "../common/mixins", 
     "./mixins" 
    ] 
    }, 
    "User": { 
    "dataSource": "db" 
    }, 
    "AccessToken": { 
    "dataSource": "db", 
    "public": false 
    }, 
    "ACL": { 
    "dataSource": "db", 
    "public": false 
    }, 
    "RoleMapping": { 
    "dataSource": "db", 
    "public": false 
    }, 
    "Role": { 
    "dataSource": "db", 
    "public": false 
    }, 
    "Companies": { 
    "dataSource": "pg", 
    "public": true, 
    "$promise": {}, 
    "$resolved": true 
    }, 
    "Addresses": { 
    "dataSource": "pg", 
    "public": true, 
    "$promise": {}, 
    "$resolved": true 
    }, 
    "CompaniesAddresses": { 
    "dataSource": "pg", 
    "public": true, 
    "$promise": {}, 
    "$resolved": true 
    } 
} 

ответ

0

иностранные ключи в компании и адресе следующим образом:

**common/models/companies.json** "relations": { "addresses": { "type": "hasMany", "model": "Addresses", "foreignKey": "addressesid", <---- this should be companiesid "through": "CompaniesAddresses" } } На оборотной стороне (адрес) сделать то же самое изменение, все будет работать.

Смежные вопросы