2015-11-03 45 views
0

我有點困惑loopback.io的屬於關聯關係的功能Loopback.io屬於關聯在REST

因此,讓我們看看下面的例子:

我有一個名爲項目模型具有關係到客戶對象。所以一個項目屬於一個客戶。

這是我的項目模型

{ 
    "name": "Project", 
    "plural": "Projects", 
    "base": "PersistedModel", 
    "strict": false, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "title": { 
     "type": "string", 
     "required": true 
    }, 
    "description": { 
     "type": "string" 
    }, 
    "dateCreated": { 
     "type": "date" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "customer": { 
     "type": "belongsTo", 
     "model": "Customer", 
     "foreignKey": "customerId" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 

所以,當我運行應用程序,我去http://0.0.0.0:3000/explorer我能看到的API。但是當我去項目,我只看到

GET /Projects/{id}/customer  Fetches belongsTo relation customer. 

,我也期待其他功能,如

POST /Projects/{id}/customer 
DELETE /Projects/{id}/customer 

爲什麼他們無法在這裏?或者我如何通過REST API爲客戶設置項目?

回答

2

讓我們先來了解屬於關聯關係,理解爲什麼只得到休息端點創建:

GET /Projects/{id}/customer  Fetches belongsTo relation customer. 

爲什麼迴環沒有創建以下鏈接:

POST /Projects/{id}/customer 
DELETE /Projects/{id}/customer 

belongsTo關係在兩個模型實例之間創建一對一的關係。它用於將一個實例的所有權提供給另一個實例。在你的情況下,項目模型實例屬於客戶模型實例。現在由於項目屬於客戶,因此客戶擁有項目實例以及其他終端的解釋。

GET /Projects/{id}/customer  Fetches belongsTo relation customer. 

,因爲客戶可以有工程實例,因此以上是有效,客戶可以獲取的項目。

POST /Projects/{id}/customer 
DELETE /Projects/{id}/customer 

,因爲客戶不屬於一個項目,而有項目,上述其餘的端點沒有意義,創建或disowning它的主人(客戶)的項目。

+0

「客戶擁有項目」解釋了這一切。我會在項目端放置一個belongsTo,並在客戶端放置一個hasMany – koala

+0

。這將完成雙方的關係。 –

0

就我所知,它不起作用。爲了創建鏈接,您需要創建客戶,然後使用該客戶的ID作爲項目模型中的ID。

所以,你的API調用將是:

POST /客戶

創造客戶,其次是

POST /項目

創建該項目。

在第二篇文章中,您需要指定CustomerId以將項目鏈接到客戶,或者您需要事後使用customerId更新項目。

則:

項目/ {ID} /客戶

檢索屬於該項目的客戶。

或者您可以在其中一個模型上編寫自己的遠程方法以在一次調用中執行此操作。

關係的API的完整列表可以在這裏找到:

StrongLoop Relations API

1

第一您的項目模型缺少你的屬於關聯關係中提到的客戶ID字段。

這裏的項目模型

{ 
    "name": "Project", 
    "plural": "Projects", 
    "base": "PersistedModel", 
    "strict": false, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "title": { 
     "type": "string", 
     "required": true 
    }, 
    "description": { 
     "type": "string" 
    }, 
    "dateCreated": { 
     "type": "date" 
    }, 
    "customerId": { 
     "type": "string", 
     "required":true 
    }, 
    "validations": [], 
    "relations": { 
    "customer": { 
     "type": "belongsTo", 
     "model": "Customer", 
     "foreignKey": "customerId" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 

現在你的客戶模型還應該有關係的hasMany的另一部分。沒有它,它不會按預期工作。

下面是客戶型號代碼

{ 
    "name": "Customer", 
    "plural": "Customers", 
    "base": "PersistedModel", 
    "strict": false, 
    "idInjection": false, 
    "options": { 
    "validateUpsert": true 
    }, 
    "properties": { 
    "name": { 
     "type": "string", 
     "required": true 
    }, 
    "email": { 
     "type": "string", 
     "required": true 
    }, 
    "dateCreated": { 
     "type": "date" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "projects": { 
     "type": "hasMany", 
     "model": "Project", 
     "foreignKey": "customerId" 
    } 
    }, 
    "acls": [], 
    "methods": {} 
} 
有關係的,從客戶雙方

現在< - >項目定義你的API應該有這樣的端點:你提到

GET Customers/{id}/Projects 
POST Customers/{id}/Projects 
PUT Customers/{id}/Projects 

端點無效,因爲您無法爲項目創建客戶,但有其他解決方法。