gpt4 book ai didi

node.js - Sequelize 'Inverse' 关系

转载 作者:行者123 更新时间:2023-12-03 22:20:11 25 4
gpt4 key购买 nike

不确定我是不是很傻,但遇到了一些关于 Sequelize 的问题,让我很难过。

序言

假设您有 用户 项目 就像 Sequelize 站点提供的示例一样,以保持简单。

对于此示例,使用 n:m 关系,可以将一个用户分配给多个项目,反之亦然。

正确设置关系后,您应该能够调用以下内容:

//To get the projects a user is assigned to:
user.getProjects();

//To get the users assigned to a project:
project.getUsers();

问题

虽然这已经很方便了,但如何访问“反向”关系,例如 用户未分配给项目 项目用户不是 的一部分?

这是通过范围来实现的,还是可以通过创建另一个关系来实现?

亲切的问候 :)

最佳答案

有几种方法可以实现您的要求。第一个是使用 getProjects()getUsers() 方法返回分配给 User/Project 的对象并使用它来返回未分配的记录(类似于 id NOT IN (...) )

user.getProjects().then(projects => {
let mappedProjects = projects.map(project => {
return project.id;
});

Project.all({
where: { id: { $notIn: mappedProjects } }
}).then(projects => {
// projects not assigned to 'user'
});
});

另一方面,您可以在 getUnassignedProjects() 模型上创建一些实例方法,例如 User ,该方法将使用 sequelize.literal() sequelize.where() sequelize.col() 方法执行上述操作或类似操作
instanceMethods: {
getUnassignedProjects: function(){
return sequelize.models.Project.all({
where: sequelize.where(
sequelize.col('Project.id'),
' NOT IN ',
sequelize.literal(`(SELECT "projectId" FROM users_projects WHERE "userId" = ${this.id})`)
)
});
}
}

上面的代码将生成与此类似的查询

SELECT "id", "name" FROM "projects" AS "Project" WHERE "Project"."id" NOT IN (SELECT "project" FROM users_projects WHERE "userId" = 1);
users_projects 当然是以 n:m 关系连接用户和项目的表。

关于node.js - Sequelize 'Inverse' 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43343354/

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