所以我有下一个结构:评论,用户,顶。
用户有很多喜欢,评论有很多喜欢。
我正在尝试获取所有评论,并检查用户是否喜欢它们。我有一个与LEFT JOIN的原始查询,它工作得很好:
await sequelize.query(`SELECT comments.*, likes.liked FROM comments LEFT JOIN
likes ON likes.commentId = comment.id AND likes.user_id = '123'`, {type: Sequelize.QueryTypes.SELECT});
我得到这样的东西:
[{
"id": 1,
"userId": "123",
"comment": "abcde",
"liked": true
},
{
"id": 2,
"userId": "552",
"comment": "abc",
"liked": null
}]
现在我正在尝试使用findAll()
方法来实现相同的功能。
await Comment.findAll({
include: [{
model: Like,
attributes: ['liked'],
where: {user_id: id},
required: false
}]
})
但是我得到了:
[{
"id": 1,
"userId": "123",
"comment": "abcde",
"likes": [{liked:true}]
},
{
"id": 2,
"userId": "552",
"comment": "abc",
"likes": []
}]
所以问题是:如何仅包含列liked
而不包含likes
数组?谢谢。
答案 0 :(得分:2)
将属性重新定位到主模型中。来自所包含模型的属性是嵌套的...。而主模型则不是。下面是一个示例。如果属性名称出现在查询的> 1个表中,则可以添加表名。
await Comment.findAll({
include: [{
model: Like,
attributes: [], // attributes here are nested under "Like"
where: {user_id: id},
required: false
}],
attributes: {
include: [[Sequelize.col("liked"), "liked"]] // NOT nested
}
})