我为模型用户定义了classMethod
// model user.js
classMethods: {
associate: function(models) {
User.belongsToMany(models.project, {through: 'user_project', foreignKey: 'user_id', otherKey: 'project_id'})
}
}
从Express i中的路线然后查询该用户的项目并将其输出为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.
我尝试过各种exclude和include语句,但输出总是包含它。
有没有办法在输出中没有显示?
答案 0 :(得分:6)
我偶然发现了解决方案。
要从联接表中删除属性,您可以使用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",
}
]
答案 1 :(得分:1)
您应该尝试以下
user.getProjects({
attributes: ['id', 'title'],
through: {
attributes: []
}
})
.then(function(projects) {
res.json(projects)
})
答案 2 :(得分:0)
对我来说唯一的方法是将中间表的DefaultScope定义为
{ attributes: [] }
我正在使用Sequelize @ 5