我为模型用户定义了一个 classMethod
// model user.js
classMethods: {
associate: function(models) {
User.belongsToMany(models.project, {through: 'user_project', foreignKey: 'user_id', otherKey: 'project_id'})
}
}
从 Express 中的路由中查询该用户的项目并将其输出为 JSON
user.getProjects({
attributes: ['id', 'title'],
})
.then(function(projects) {
res.json(projects)
})
这工作正常,除了输出还包含我想隐藏/省略/删除的 user_project
属性
[
{
"id": 8,
"title": "Some project",
"user_project": {
"created_at": "2017-02-16T22:52:48.000Z",
"updated_at": "2017-02-16T22:52:48.000Z",
"project_id": 8,
"user_id": 5
}
},
//etc.
我尝试了各种排除和包含语句,但输出始终包含它。
有没有办法不让它出现在输出中?
我偶然发现了解决方案。
要从连接表中删除属性,您可以使用joinTableAttributes
,如下所示:
user.getProjects({
attributes: ['id', 'title'],
joinTableAttributes: []
})
.then(function(projects) {
res.json(projects)
})
通过这样做,它将删除 user_project 表的(参见OP)输出,结果是:
[
{
"id": 8,
"title": "Test Project",
},
{
"id": 4,
"title": "Another one",
}
]
我是一名优秀的程序员,十分优秀!