2014-05-24 27 views
1

我一直在享受v0.10中的新Sails關係,但是我目前面臨的最大挑戰是通過其關聯查找模型。如果我要填充一個手動關聯,比如一個ID數組,這將非常容易。但是,我似乎無法找到用Sails關聯來處理查找的正確方法。SailsJS v0.10由許多協會查找模型

我提供了一些示例代碼,概述兩個模型,公司和用戶。公司可以有很多用戶,而用戶只能有一個公司。這是一個非常直接的一對多關係,目標是找到與用戶ID匹配的所有公司。

## Company.js 
name: 
    type: 'string' 
    required: true 

users: 
    collection: 'User' 
    via: 'company' 


## User.js 
company: 
    model: 'Company' 
    required: true 

last_name: 
    type: 'string' 
    required: true 

first_name: 
    type: 'string' 
    required: true 


## Lookup Users by Company ID of '2' 
User.find(where: company: 2).exec(console.log) 

# Result 
# [] - Array of users matching that company ID 


## ---- The Problem/Question ---- 
## Lookup Companies by User ID '1' 
Company.find(where: users: contains: 1).exec(console.log) 

# Result 
# Error (E_UNKNOWN) :: Encountered an unexpected error: 
# error: column company.users does not exist 
# Details: 
# { error: 'E_UNKNOWN', 
# summary: 'Encountered an unexpected error', 
# status: 500, 
# raw: 'error: column company.users does not exist' } 

我很感激任何關於處理這種查找的最佳方法的想法!

+0

看起來ID值,用戶喜歡你的模型不正確定義: HTTP:// beta.sailsjs.org/#/documentation/reference/Models – Robin

+0

它們是,它只是與屬性字面上不存在時一樣的消息。 – mbmufffin

回答

2

在查詢「所有公司的用戶列表包含#1」的情況下,您正在嘗試執行一個子查詢,該子查詢當前不支持Waterline。此外,這是一個有點愚蠢的例子,因爲每個用戶只能有一家公司,所以你只能期望得到一個結果。在任何情況下,正確的方法,簡直是查找用戶#1和填入其公司:

User.findOne(1).populate('company').exec(function(err, user) { 
    console.log(user.company); 
}); 

我要把它留給你來翻譯,要CoffeeScript的;)

要查找所有一個公司的用戶,你會做同樣的事情:

Company.findOne(123).populate('users').exec(...) 

可以過濾填充的結果,但它是不一樣的子查詢:

Company.findOne(123).populate('users', {where: {id: [1,2,3]}}).exec(...) 

這將讓你的公司#123,填充它的users陣列與1,2或3

+0

謝謝,斯科特。我最終提出了一個解決方案,沿着你先提到的方向發展,找到過濾的模型類型,然後填充目標模型。 – mbmufffin