2014-04-08 20 views
10

Używam wersji Sails.js 0.10.0-rc4. Wszystkie modele używają żagli-mysql.Zapytanie Sails.js o powiązaną wartość

Próbuję wysłać zapytanie do modelu, który ma skojarzenie "jeden do wielu" z innym modelem (zapytanie ma miejsce po stronie "wiele").

Wygląda to mniej więcej tak:

Post.find() 
    .where({ category: category_id }) 
    .populate("category") 
    .exec(...) 

To daje mi pustą tablicę z powrotem jednak kiedy wychodzę na zewnątrz .populate("category") mogę uzyskać prawidłowy zestaw wyników.

Wiem, że mogę opuścić .populate("category"), a następnie pobrać oddzielnie każdy obiekt kategorii korelacji, ale zastanawiam się, czy istnieje lepsze rozwiązanie tego problemu.

Odpowiedz

12

To nie jest w 100% jasne, co próbujesz zrobić tutaj. Jeśli twoim celem jest, aby filtrować kategorie, które uzyskać zaludnionych na Post, można zrobić:

Post.find() 
    .populate("category", {where: { category: category_id }}) 
    .exec(...) 

Jeśli chcesz tylko odzyskać Post S z danej kategorii, należy zrobić:

Category.findOne(category_id) 
     .populate("posts") 
     .exec(function(e, c) {console.log(c.posts);}) 
+3

Drugi fragment spełnia swoje zadanie. Chciałbym otrzymywać posty w określonej kategorii. Problem polega na tym, że uruchamiam kilka różnych zapytań na tej trasie (otrzymuj posty według nazw, otrzymuj posty według liczby wyświetleń itp.). Dlatego chciałbym móc w podobny sposób zapytać "otrzymuj posty według kategorii". Czy wiesz, czy to możliwe? –

+1

Działa w tym samym scenariuszu .. Btw, @scott działa tylko dla stowarzyszenia jeden-do-jednego? –

+1

Również tutaj jest ten sam problem. Działa to tylko dla powiązań jeden do jednego, a nie dla jeden-do-wielu lub wiele-do-maja. @Lujaw, znalazłeś rozwiązanie? –

1

Original post był zbyt szybko

następujące prace dla mnie (żagli 0.12) z populacji:

Post.find({category: category_id}) 
    .populate("category") 
    .exec(...) 

ale nadal jestem zaskoczony, którzy szukać w podkwerendzie niż jakikolwiek inny atrybut id ..

Edit2: Wydaje się głęboko zapytanie nie jest jeszcze obsługiwany: https://github.com/balderdashy/waterline/issues/266