gpt4 book ai didi

node.js - SailsJS v0.10 多关联查找模型

转载 作者:太空宇宙 更新时间:2023-11-03 23:41:00 25 4
gpt4 key购买 nike

我一直很喜欢 v0.10 中的新 Sails 关系,但我目前最大的挑战是通过关联查找模型。如果我要填充一个手动关联,例如 ID 数组,这将非常容易。但是,我似乎找不到使用 Sails 关联处理查找的正确方法。

我提供了一些示例代码,概述了两个模型:公司和用户。公司可以拥有多个用户,而一个用户只能拥有一个公司。这是一种非常直接的一对多关系,目标是找到与用户 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 的所有公司”的情况下,您正在尝试执行子查询,而 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,并仅使用 ID 值为 1、2 或 3 的用户填充其 users 数组。

关于node.js - SailsJS v0.10 多关联查找模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23850283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com