簡體   English   中英

Strongloop Loopback:按相關模型的ID過濾

[英]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( oneTag實例。 這破壞了整個工作流程的原因,因為我只處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM