使用sequelize建立mySQL数据库中多对多关系出现报错,且不知道怎么关联查询。
问题描述
我目前使用的是egg.js+sequelize+mySQL。需求是给出前端个人收藏页文章列表数据,也就是找某一个人收藏的所有文章。想做文章表和前台用户表的多对多关联,并进行查询,但是在关联的时候出现报错:
AssociationError [SequelizeAssociationError]: article.belongsToMany(user) requires through option, pass either a string or a model
问题出现的环境背景及自己尝试过哪些方法
我猜大概是through后面的第三张表写错了,但是加引号不加引号,大写小写都试了一遍,报错没有消失。
相关代码
用户表:
'user strict';
module.exports = app => {
const { STRING } = app.Sequelize;
const User = app.model.define('user', {
username: STRING(30)
}
);
User.associate = function () {
app.model.User.belongsToMany(app.model.Article, { through:app.model.ArticleCollection, foreignKey: 'user_id' });
};
return User;
};
文章表:
'user strict';
module.exports = app => {
const { STRING } = app.Sequelize;
const Article = app.model.define('article', {
title: STRING(30)
}
);
Article.associate = function () {
app.model.Article.belongsToMany(app.model.User, { through:app.model.ArticleCollection, foreignKey: 'article_id' });
};
return Article;
};
关联表:
'user strict';
module.exports = app => {
const ArticleCollection = app.model.define('articleCollection', {}, { timestamps: true});
return ArticleCollection;
);
你期待的结果是什么?实际看到的错误信息又是什么?
我希望能够建立user和article多对多的关系,并且查询某个userId下,收藏的文章列表,这里我有一个疑惑,就是我需要的数据并不仅仅是文章ID,而是需要一个文章的内容列表,这样给到前端就可以直接用上。那我是需要在article表里执行查询吗?谢谢各位大佬!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
已经解决了。
1.文章表(article):
2.用户表(user):
3.关联表(collection):
不用写关联的语句,定义好article_id和user_id.
4.找到某一位用户下收藏的所有文章列表:
service层user.js:
*在这个过程中如果不小心还有可能发生is not associated with错误,这里是解决办法:Sequelize belongsToMany关系的使用及 is not associated with 问题的处理