Sequelize联表查询的问题
发布于 5 年前 作者 1134506391 3308 次浏览 来自 问答

问题

2个表相关联,一定要在2个表中的定义associate吗, 如下user表,post表, 一个用户可以有多篇文章,一篇文章只能属于一个用户

app.model.User.hasMany(app.model.Post, { as: 'posts' });
app.model.Post.belongsTo(app.model.User, { as: 'user', foreignKey: 'user_id' });

user表

  const User = app.model.define('user', {
    id: {
      type: INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    name: STRING(30),
    age: INTEGER,
    created_at: DATE,
    updated_at: DATE,
  });

  User.prototype.associate = function() {
    app.model.User.hasMany(app.model.Post, { as: 'posts' });
  };

post

  const Post = app.model.define('post', {
    id: {
      type: INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    title: STRING(30),
    content: STRING(255),
    user_id: INTEGER,
    created_at: DATE,
    updated_at: DATE,
  });

  Post.associate = function() {
    app.model.Post.belongsTo(app.model.User, { as: 'user', foreignKey: 'user_id' });
  };
2 回复

@1134506391 hasMany和belongsTo是属于单向管理的,两者都会添加外键,hasMany(target)会为target添加外键,(source).belongsTo会为source添加外键,他们是为不同场景设计成的单向关联,比如说,你只需要查询每个用户下的文章,那么肯定是在文章上添加外键 Uesr.hasMany(Post), 如果你需要一个查询文章属于那个用户的,那么就需要Post.belongsTo(User),你自己用sequelize的include预加载一下试试就能感觉到了 image.png

回到顶部