Sequelize联表查询的问题
问题
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预加载一下试试就能感觉到了
@869288142 非常感谢