SailsJS v0.10由许多协会查找模型

我一直在享受v0.10中新的Sails关系,但是我目前面临的最大挑战是通过他们的协会来查找模型。 如果我已经填充了一个手动关联,比如一个ID数组,这将会非常容易。 但是,我似乎无法find用Sails关联来处理查找的正确方法。

我提供了一些示例代码,概述了两个模型,一个公司和一个用户。 公司可以有很多用户,而一个用户只能有一个公司。 这是一个非常简单的一对多关系,目标是find与用户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' } 

我会很感激任何想法处理这个查询的最佳方法!

在查询“所有公司的用户列表中包含#1”的情况下,您正在尝试执行一个子线查询,而这个子线查询并不是当前支持的。 此外,这是一个稍微愚蠢的例子,因为每个用户只能有一个公司,所以你只能期待一个结果。 在任何情况下,正确的方法就是查找用户#1并填充其公司:

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

我会留给你把它翻译成Coffeescript;)

要find所有公司的用户,你可以做类似的事情:

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

您可以筛选填充的结果,但与子查询不同:

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

这将使您的公司#123,并填充其users数组与ID值为1,2或3的用户。