使用sequelize建立mySQL数据库中多对多关系出现报错,且不知道怎么关联查询。

发布于 2022-09-12 00:15:27 字数 1518 浏览 24 评论 0

问题描述

我目前使用的是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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

書生途 2022-09-19 00:15:27

已经解决了。
1.文章表(article):

app.model.Article.belongsToMany(app.model.User, { through: app.model.Collection, foreignKey: 'article_id' })

2.用户表(user):

app.model.User.belongsToMany(app.model.Article, { through: app.model.Collection, foreignKey: 'user_id' })

3.关联表(collection):
不用写关联的语句,定义好article_id和user_id.
4.找到某一位用户下收藏的所有文章列表:
service层user.js:

async find(id) {
  const { ctx } = this;
  const user = await ctx.model.User.findByPk(id, {
    include: [
      {
        model: ctx.model.Article
      }
    ]
  });
  return user;
}

*在这个过程中如果不小心还有可能发生is not associated with错误,这里是解决办法:Sequelize belongsToMany关系的使用及 is not associated with 问题的处理

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文