引言
不知道为啥sequelize没火起来,有一次在慕课网上看到一个关于讲sequelize的视频,感觉用起来肥肠的方便啊,可是项目中遇到好多问题,网上可参考的文档太少了,中间遇到非常多的坑,不过总算做出来了,下面这个项目是一个简易的类似微博评论功能(没有实现分页功能),不过还有些细节需要优化,下面先上图
主页面
提问弹窗
详情界面
情景就是以上情景,那么我们直接进入正题,先看一看数据库表之间的关系,我在数据库中建立了三张表,分别是问题表Questions,评论回复的人员表Consumers,评论回复表Comment,那么我们一一介绍一下各个表并且看一下里面的字段
问题表
评论回复的人员表(每次提问或者回复都会根据当前登陆人在表中创建一个用户名)
评论回复表
这个表设置了pid和replyid,其中pid是用来分级展示(一级评论,二级评论),replyid表示回复的那一条,如果直接对文章发表评论那么pid和replyid都为0,如果直接对一级评论回复那么pid和replyid均为一级评论的id,如果是对楼中楼进行回复那么pid为一级评论的id,replyid为你回复的id
数据库的初始化
1.创建一个数据库(这里我们创建了一个todo_development)
2.使用‘sequelize cli’ 初始化项目的数据库配置信息
创建一个db的文件夹 (mkdir db)进入到文件夹执行npx sequelize init
3.在config中加入 "timezone":"+08:00"//中国时间
4.在config中修改database对应我们的todo_development数据库名称
5.生成模型文件,例如创建问题表执行以下操作(其余两张表都这么创建)npx sequelize model:generate --name Questions --attributes title:string,createTime:date,content:string
6.持久化,模型对应的【数据库表】,然后再打开Navicat就会多出一张问题表npx sequelize db:migrate
7.在这里我们会自动生成两个字段(创建时间和修改时间) 我们不需要就在migrate删掉,
然后在models中加入timestamps:false
定义表关系
上面的表我们也看到了创建评论表(Comments)的时候多创建一个QuestionId用来关联对应的问题的,在models中添加以下代码(图一)用来连接Questions表,而问题表也需要和评论表进行包含关系,这里一个问题可以包含多个评论所以我们使用hasMany
(图二)
图一
图二
而提问的人只能有一个所以问题表只关联一个用户使用hasOne
(图一),评论的人也是只有相对的用户进行评论所以也使用hasOne
图一
图二
评论回复人员表中只需要连接评论表和问题表即可
这样我们三张表中的关系就定义完成了
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。