[英]Strongloop Loopback: Filter by id of related Model
我有一個Strongloop Loopback Node.js項目,包含一些模型和關系。
手頭的問題
我的問題涉及如何使用Angular SDK僅查詢與某個Tag
id有關的Media
實例 - 而 不是查詢Tags.media
(返回Tag
實例),而是以某種方式進行查詢以返回普通的Media
實例。
請閱讀以下具體信息..
規格
基本上,我有一個模型Media
,有很多'標簽'(模型Tag
)。 想象具有各種EXIF標簽( Tag
)的圖像文件( Media
)。 這是關系規范(這一切都按預期工作):
媒體(media.json):
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasAndBelongsToMany",
"model": "tag"
}
}
標簽(tag.json):
{
"name": "tag",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
}
},
"relations": {
"medias": {
"type": "hasAndBelongsToMany",
"model": "media"
}
},
"acls": [],
"methods": []
}
解決方案
現在,我知道我可以這樣做一個查詢(在我的例子中使用Angular SDK,但語法是相同的):
injector.get('Tag').find({
'filter': {
'include': 'medias',
'where': {'id': <mytagid>}
}
});
我使用這種方法的問題是,我收到了帶有附加Media
實例的1( one
) Tag
實例。 這破壞了整個工作流程的原因,因為我只處理Media
實例..我只想按Tag
ID進行過濾 ,而不是打擾Tag
。
底線
如果我看到API資源管理器( /explorer/
), GET /api/tags/<myTagID>/medias
的返回值正是我需要的 - 一個Media
對象數組 - 但是如何使用Angular完全像這樣查詢它們SDK(lb_services)?
我遇到了類似的問題。 一個建議是打開lb-services.js並嘗試查找:/ tags /:id / medias或類似的東西。 然后你會發現這樣的評論: // INTERNAL。 請改用Tags.medias()。 或類似的東西。 這就是你應該調用的方法。 不要調用“原型$ __ get .....”方法。
然后只需調用它在那里所說的內容:Tag.medias({id:})
其他建議:
正如您在描述中所述,媒體有很多標簽。 那么為什么不使用呢
{
"name": "media",
"base": "PersistedModel",
"properties": {
"id": {
"type": "string",
"id": true
}
},
"relations": {
"tags": {
"type": "hasMany", <---------- hasMany
"model": "tag",
"foreignKey": "tagId" <---FK name
}
}
並且對於標簽而言屬於類型。
{
"name": "tag",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"name": {
"type": "string",
"required": true
}
},
"relations": {
"medias": {
"type": "belongsTo",
"model": "media",
"foreignKey": "mediaId" <---FK name
}
},
"acls": [],
"methods": []
}
但實際上我不認為這是問題,因為你說當你請求GET /api/tags/<myTagID>/medias
它會返回你想要的東西。
然后,在AngularJS中,您可以使用:
Media.tags({id:<mediaId>})
對於media /:id / tags
並為另一方嘗試:
Tag.medias({id:<tagId>})
Tag.find({
filter:{
where:{mediaId: <mediaId>} <----mediaId comes from FK name
}
})
在這種情況下,兩者都是持久性模型,沒有問題,在使用擴展用戶類型的數據執行類似操作時,我遇到了權限問題。 不過那是另一回事了...
希望這有用,我改變了我正在做的類似應用程序的一些東西,並希望在適應您的代碼時不會出現太多錯誤...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.