本节建立model层的表格:
分别有user用户表格,article文章表格,comment评论表格,tag标签表格
以user.js为例:
const {DataTypes} = require("sequelize") //引入数据类型约束
const sequelize = require("../db/sequelize")
const User = sequelize.define("User",{
email:{
type:DataTypes.STRING,
allowNull:false,//允许为空?
primaryKey:true //主键
},
username:{
type:DataTypes.STRING,
allowNull:false,
unique:true //唯一
},
password:{
type:DataTypes.STRING,
allowNull:false
},
avatar:{
//头像
type:DataTypes.TEXT,
allowNull:true
},
bio:{//简介
type:DataTypes.TEXT,
allowNull:true
}
})
module.exports=User
接下来的几个表格都这样建就可以。建完之后都引入到initDB中来构建数据库中每个表之间的关联关系,一对一,一对多,多对一,多对多。
A.hasOne(B) A有一个B
A.belongsTo(B) A属于B
A.hasMany(B) A有多个B(可以有一个onDelete标识,用于删除A之后也要删除A产生的B)
A.belongsToMany(B,{throuh:"C"}) A属于多个B,通过连接表C,所以表C是新产生的表
用户,文章,评论,标签这四者的关系:
一个用户有多篇文章,hasmany
一篇文章只能属于一个用户,belongsto
一个用户能去评论很多,hasmany
一个评论只属于一个作者,Belongsto
一个用户能关注多个用户,多对多,belongstomany
一篇文章可以有很多评论,hasmany
一个评论只能属于一篇文章,belongsto
一个文章能有多个标签,hasmany
一个标签也能给多个文章使用,hasmany
......
const initRelation = ()=>{
User.hasMany(Artical,{
onDelete:"CASCADE"//小瀑布,用于删除作者,同时删除他的所有文章
});
Artical.belongsTo(User)
Artical.belongsToMany(Tag,{
through:"TagList", //多对多产生的新表
uniqueKey:false, //唯一的键?无
timestamps:false //无时间戳
});
Tag.belongsToMany(Artical,{
through:"TagList",
uniqueKey:false,
timestamps:false
});
Artical.hasMany(Comment,{
onDelete:"CASCADE" //小瀑布
});
Comment.belongsTo(Artical);
User.hasMany(Comment,{
onDelete:"CASCADE"
})
Comment.belongsTo(User)
User.belongsToMany(User,{
through:"Followers",
as:"followors",//因为User对User,不加as会报错
timestamps:false
})
User.belongsToMany(Artical,{
through:"Favourites",
timestamps:false
})
Artical.belongsToMany(User,{
through:"Favourites",
timestamps:false
})
}
写好之后去调用这个方法,并且设置自动同步该模型:
await sequelize.sync({alter:true}) //自动同步
完成之后,至此已经完成数据库建表的方法,可以打开软件刷新并查看一下是否建表成功,是否产生了关联表。
有的!完成model的构建以及关系