我正在用mysql和sequelize构建nodejs/express后端,我正在努力解决通过关系进行查询的语法问题。
我有一个category表、一个media(images)表和一个join表mediacegory。我有一个包含类别id的rest路由,我想获取所选类别的所有媒体条目。
我在app.js中定义了模型和以下定义
Media.belongsToMany(Category, {
through: {
model: MediaCategory,
unique: false
},
foreignKey: 'category_id',
constraints: false
});
Category.belongsToMany(Media, {
through: {
model: MediaCategory,
unique: false
},
foreignKey: 'media_id',
constraints: false
});
我的getcategoryimages控制器方法是:
exports.getCategoryImages = (req, res, next) => {
const categoryID = req.params.category;
console.log("const categoryID: ", categoryID);
Category.findAll({
include: [{
model: Media,
where: {
id: categoryID
}
}]
})
.then(categoryImages => {
if (!categoryImages) {
const error = new Error('Could not find categoryImages.');
error.statusCode = 404;
throw error;
}
res
.status(200)
.json({
message: 'Fetched category images successfully.',
items: categoryImages,
});
})
.catch(err => {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
});
};
Postman 对网址的回复localhost:8080/categoryimages/16 这是:
{
"message": "Fetched category images successfully.",
"items": []
}
items数组中应该返回几十个图像记录。
恐怕我很难理解通过联接表获取的语法,我希望有人能指出我的错误之处。
1条答案
按热度按时间oxalkeyp1#
问题是,我在app.js中的两个关联定义中颠倒了外键
media使用“media\u id”作为外键,category使用“category\u id”,而不是像我最初尝试的那样。
同样,正如艾玛在上面的评论中指出的那样
where: { id: categoryID }
块需要在include之外。