2015-10-02 78 views
2

我目前正在研究我的第一個Loopbackjs項目,並面臨一個看似簡單的問題: 假設我有一個模型「Post」和一個模型「Tag」。郵政擁有並且屬於許多標籤。LoopbackJS:HasAndBelongsToMany,如何通過關係的屬性查詢/過濾?

現在我需要列出具有特定標籤的所有帖子。我只是無法弄清楚如何用Loopback創建一個查詢來實現這一點。 我認爲它會這樣工作,但它不: Posts.find({where: {tag.id: {inq: [1, 4]}}}); 

我將不勝感激任何幫助。

回答

4

這不像應該對某些相關屬性執行過濾器那麼簡單。 There is a pull request outstanding but it's been open for a long time now.據我所看到的,過濾的唯一方法是在主模式,所以你可以這樣做:

Tags.find({"include":"posts","where":{"id":{"inq":[1, 4]}}}) 

不幸的是,你需要做更多的工作,以獲得從文章的一個很好的列表你回來的結果。

編輯您也可以得到所有的帖子,只帶回符合使用scope您查詢的標籤,有如下:

Posts.find({ 
    "include": { "relation": "tags", 
        "scope": { 
         "where": { 
          "id": { "inq": [1, 4]} 
         } 
        } 
       } 
}); 

在查詢的回調,你可以整理一下結果在返回之前使用以下代碼:

var finalresult = instance.filter(function(post) { 
    return post.toJSON().tags.length > 0; 
}); 

好處是,返回的結果格式與您的預期相同。但是,我的第二個示例的性能可能非常差,因爲它將始終返回所有帖子,除非您在帖子級別指定過濾器或分頁。它基本上是一個左連接,在那裏你想要一個內連接,這個Loopback目前無法做到。

+0

非常感謝!我現在這樣做,然後過濾出重複項。不過,我認爲這是LoopbackJS ORM的一個很大的限制,我正在重新考慮將它用於更大的項目。 – Nanunana

+0

@Nanunana當我發現時,我無法相信......我做了更多的挖掘並找到了另一種方式。仍然不是很好,但也許更好一點。看我的編輯。 – conradj

+0

Hy,我有一個hasOne關係,並且像這樣做的工作..但它包括關係字段連同主要對象..是否有可能使它分離?恩。可以說標籤有字段標記名..所以它來Post.tagname ..而不是Post.tag.tagname – mariomol

0

我來到這裏的同一個問題,但經過一些研究後,我得到了這個解決方案。

我要用一個例子:model Provincias hasAndBelongsToMany Cantones。

爲了得到:/ API/Provincias/1/cantones

您可以在角代碼中使用:

Provincias.cantones({ 'ID':1});

+0

歡迎來到Stackoverflow。請花些時間閱讀如何寫出一個好的答案。閱讀[this](http://meta.stackexchange.com/a/7659/338114)和[this](http://stackoverflow.com/help/how-to-answer) –