【发布时间】:2022-01-15 07:24:40
【问题描述】:
我正在为 Instagram 等社交媒体应用创建 restApi 端点。
有4张桌子
- 用户
- 发布
- 点赞
- 后媒体
协会... 一个用户有很多帖子, 一个帖子属于一个用户, 一个帖子有很多帖子喜欢, 一个帖子有很多帖子媒体, 一个 postLike 属于一个帖子,属于一个用户, 一个 postMedia 属于一个帖子,
如果你仍然有点不清楚请评论任何帮助将不胜感激。
models/user.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class User extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here????????????????????????????
User.hasMany(models.Post, {
foreignKey: 'user_id',
as: 'posts',
onDelete: 'CASCADE',
});
User.hasMany(models.postLikes, {
foreignKey: 'user_id',
as: 'postLikes',
onDelete: 'CASCADE',
});
}
};
User.init({
profile_img: DataTypes.STRING,
firstname: DataTypes.STRING,
lastName: DataTypes.STRING,
email: DataTypes.STRING,
phone: DataTypes.STRING,
password: DataTypes.STRING,
dob: DataTypes.STRING,
gender: DataTypes.ENUM('male', 'female'),
token: DataTypes.STRING,
is_deleted: DataTypes.BOOLEAN,
}, {
sequelize,
modelName: 'User',
});
return User;
};
models/post.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class Post extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here????????????????????????
Post.hasMany(models.postLikes, {
foreignKey: 'post_id',
as: 'postLikes',
onDelete: 'CASCADE',
});
Post.hasMany(models.postMendia, {
foreignKey: 'post_id',
as: 'postMedia',
onDelete: 'CASCADE',
})
}
};
Post.init({
description: DataTypes.STRING,
user_id: DataTypes.INTEGER,
is_deleted: DataTypes.BOOLEAN,
}, {
sequelize,
modelName: 'Post',
});
return Post;
};
models/postLikes.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class postLikes extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here????????????????????
postLikes.belongsTo(models.Post, {
foreignKey: 'post_id',
as: 'post',
});
postLikes.belongsTo(models.User, {
foreignKey: 'user_id',
as: 'user',
})
}
};
postLikes.init({
post_id: DataTypes.INTEGER,
user_id: DataTypes.INTEGER
}, {
sequelize,
modelName: 'postLikes',
});
return postLikes;
};
models/postMedia.js
'use strict';
const {
Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
class postMedia extends Model {
/**
* Helper method for defining associations.
* This method is not a part of Sequelize lifecycle.
* The `models/index` file will call this method automatically.
*/
static associate(models) {
// define association here????????????????????????????
postMedia.belongsTo(models.Post, {
foreignKey: 'post_id',
as: 'post'
})
}
};
postMedia.init({
url: DataTypes.STRING,
post_id: DataTypes.INTEGER,
type: DataTypes.ENUM('image', 'video')
}, {
sequelize,
modelName: 'postMedia',
});
return postMedia;
};
在上述所有模型中创建关联后,我正在运行命令
sequelize db:migrate
但是当我打开 pgAdmin4 控制台时,我看不到任何外键。
附注我指的是这篇文章https://dev.to/nedsoft/getting-started-with-sequelize-and-postgres-emp
【问题讨论】:
标签: node.js database postgresql express sequelize.js