# 一、 goodfriend好友表字段设计
| 字段名 | 数据类型及描述 | 空 | 默认值 | 字段含义 |
|---|---|---|---|---|
| id | INTEGER(20).UNSIGNED主键、自增长、UNSIGNED无符号 | 否 | 无 | 主键id |
| user_id | INTEGER(20).UNSIGNED | 否 | 0 | 用户id,user表的id |
| friend_id | INTEGER(20).UNSIGNED | 否 | 0 | 用户的好友id,user表的id |
| nickname | STRING(50) | 否 | '' | 好友备注名称 |
| friendlookme | TINYINT(1) | 否 | 1 | 朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以) |
| melookfriend | TINYINT(1) | 否 | 1 | 朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现) |
| ismystarfriend | TINYINT(1) | 否 | 0 | 朋友是不是我的星标好友(0-不是 1-是) |
| isblack | TINYINT(1) | 否 | 0 | 是否将好友加入黑名单(0-否 1-是) |
| ... | ... | ... | ... | 根据业务需求再增加字段 |
| status | TINYINT(1) | 否 | 1 | 数据状态(0-禁用 1-正常 2-锁定)(给后台管理员用的) |
| order | int(11) | 是 | 50 | 排序,默认50 |
| create_time | DATE | 否 | CURRENT_TIMESTAMP | 数据创建时间 |
| update_time | DATE | 否 | CURRENT_TIMESTAMP | 更新时间 |
- 直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。# 创建表迁移文件并生成表
- 通过迁移命名创建
goodfriend表:
- 创建迁移文件 命令:
npx sequelize migration:generate --name=goodfriend
- 创建迁移文件
goodfriend.js,内容如下:
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
const { INTEGER, STRING, DATE, TINYINT, ENUM } = Sequelize;
await queryInterface.createTable('goodfriend', {
id: {
type: INTEGER(20).UNSIGNED,
primaryKey: true,
autoIncrement: true,
comment: '主键ID'
},
user_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
friend_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户的好友id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
nickname: {
type: STRING(50),
allowNull: false,
defaultValue: '',
comment: '好友备注名称'
},
friendlookme: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以)'
},
melookfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现)'
},
ismystarfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '朋友是不是我的星标好友(0-不是 1-是)'
},
isblack: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '是否将好友加入黑名单(0-不加入 1-加入)'
},
status: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '数据状态(0-禁用 1-正常 2-锁定)(给后台管理员用的)'
},
order: {
type: INTEGER,//不限定长度.默认int(11)
allowNull: true,
defaultValue: 50,
comment: '排序,默认50'
},
// sex: { type: ENUM, values: ['男','女','保密'], allowNull: true, defaultValue: '保密', comment: '留言用户性别'},
create_time: {type: DATE, allowNull: false, defaultValue:Sequelize.fn('NOW')},
update_time: {
type: DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
comment: '更新时间'
},
});
},
async down (queryInterface, Sequelize) {
await queryInterface.dropTable('goodfriend');
}
};
- 执行迁移文件命令生成数据库表:
// 创建数据库 npx sequelize db:migrate // 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo // 可以通过 `db:migrate:undo:all` 回退到初始状态 npx sequelize db:migrate:undo:all
# goodfriend表模型
新建 app/model/goodfriend.js
'use strict';
module.exports = app => {
const { INTEGER, STRING, DATE, TINYINT, ENUM } = app.Sequelize;
const Goodfriend = app.model.define('goodfriend', {
id: {
type: INTEGER(20).UNSIGNED,
primaryKey: true,
autoIncrement: true,
comment: '主键ID'
},
user_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
friend_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户的好友id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
nickname: {
type: STRING(50),
allowNull: false,
defaultValue: '',
comment: '好友备注名称'
},
friendlookme: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以)'
},
melookfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现)'
},
ismystarfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '朋友是不是我的星标好友(0-不是 1-是)'
},
isblack: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '是否将好友加入黑名单(0-不加入 1-加入)'
},
status: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '数据状态(0-禁用 1-正常 2-锁定)(给后台管理员用的)'
},
order: {
type: INTEGER,//不限定长度.默认int(11)
allowNull: true,
defaultValue: 50,
comment: '排序,默认50'
},
// sex: { type: ENUM, values: ['男','女','保密'], allowNull: true, defaultValue: '保密', comment: '留言用户性别'},
create_time: {
type: DATE,
allowNull: false,
defaultValue: app.Sequelize.fn('NOW'),
get() {
return app.formatTime(this.getDataValue('create_time'));
}
},
update_time: { type: DATE, allowNull: false, defaultValue: app.Sequelize.fn('NOW') },
});
return Goodfriend;
}
# 二、 goodfriendapply好友申请表字段设计
| 字段名 | 数据类型及描述 | 空 | 默认值 | 字段含义 |
|---|---|---|---|---|
| id | INTEGER(20).UNSIGNED主键、自增长、UNSIGNED无符号 | 否 | 无 | 主键id |
| user_id | INTEGER(20).UNSIGNED | 否 | 0 | 申请用户id(我的id),user表的id |
| friend_id | INTEGER(20).UNSIGNED | 否 | 0 | 我申请添加的好友id,user表的id |
| nickname | STRING(50) | 否 | '' | 我的昵称或者说明 |
| friendlookme | TINYINT(1) | 否 | 1 | 朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以) |
| melookfriend | TINYINT(1) | 否 | 1 | 朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现) |
| ismystarfriend | TINYINT(1) | 否 | 0 | 朋友是不是我的星标好友(0-不是 1-是) |
| isblack | TINYINT(1) | 否 | 0 | 是否将好友加入黑名单(0-否 1-是) |
| ... | ... | ... | ... | 根据业务需求再增加字段 |
| status | ENUM('pending','refuse','agree','ignore') | 否 | pending | 申请加好友状态(pending-申请中 refuse-拒绝 agree-同意 ignore-忽略) |
| order | int(11) | 是 | 50 | 排序,默认50 |
| create_time | DATE | 否 | CURRENT_TIMESTAMP | 数据创建时间 |
| update_time | DATE | 否 | CURRENT_TIMESTAMP | 更新时间 |
- 直接在
phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。# 创建表迁移文件并生成表
- 通过迁移命名创建
goodfriendapply表:
- 创建迁移文件 命令:
npx sequelize migration:generate --name=goodfriendapply
- 创建迁移文件
goodfriendapply.js,内容如下:
'use strict';
/** @type {import('sequelize-cli').Migration} */
module.exports = {
async up (queryInterface, Sequelize) {
const { INTEGER, STRING, DATE, TINYINT, ENUM } = Sequelize;
await queryInterface.createTable('goodfriendapply', {
id: {
type: INTEGER(20).UNSIGNED,
primaryKey: true,
autoIncrement: true,
comment: '主键ID'
},
user_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户id(我的id)',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
friend_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '我申请添加的好友id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
nickname: {
type: STRING(50),
allowNull: false,
defaultValue: '',
comment: '我的昵称或者说明'
},
friendlookme: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以)'
},
melookfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现)'
},
ismystarfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '朋友是不是我的星标好友(0-不是 1-是)'
},
isblack: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '是否将好友加入黑名单(0-不加入 1-加入)'
},
status: {
type: ENUM,
values: ["pending", "refuse", "agree", "ignore"],
allowNull: false,
defaultValue: "pending",
comment: "申请加好友状态(pending-申请中 refuse-拒绝 agree-同意 ignore-忽略)",
},
order: {
type: INTEGER,//不限定长度.默认int(11)
allowNull: true,
defaultValue: 50,
comment: '排序,默认50'
},
// sex: { type: ENUM, values: ['男','女','保密'], allowNull: true, defaultValue: '保密', comment: '留言用户性别'},
create_time: {type: DATE, allowNull: false, defaultValue:Sequelize.fn('NOW')},
update_time: {
type: DATE,
allowNull: false,
defaultValue: Sequelize.literal('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'),
comment: '更新时间'
},
});
},
async down (queryInterface, Sequelize) {
await queryInterface.dropTable('goodfriendapply');
}
};
- 执行迁移文件命令生成数据库表:
// 创建数据库 npx sequelize db:migrate // 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更 npx sequelize db:migrate:undo // 可以通过 `db:migrate:undo:all` 回退到初始状态 npx sequelize db:migrate:undo:all
# goodfriendapply表模型
新建 app/model/goodfriendapply.js
module.exports = app => {
const { INTEGER, STRING, DATE, TINYINT, ENUM } = app.Sequelize;
const Goodfriendapply = app.model.define('goodfriendapply', {
id: {
type: INTEGER(20).UNSIGNED,
primaryKey: true,
autoIncrement: true,
comment: '主键ID'
},
user_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '用户id(我的id)',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
friend_id: {
type: INTEGER(20).UNSIGNED,
allowNull: true,
defaultValue: 0,
comment: '我申请添加的好友id',
references: { //关联关系
model: 'user', //关联的表
key: 'id' //关联表的主键
},
onDelete: 'cascade', //删除时操作
onUpdate: 'restrict', // 更新时操作
},
nickname: {
type: STRING(50),
allowNull: false,
defaultValue: '',
comment: '我的昵称或者说明'
},
friendlookme: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友是否可以看我发布的信息、朋友圈(0-不可以 1-可以)'
},
melookfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 1,
comment: '朋友发布的信息是否出现在我的朋友圈列表中(0-不出现 1-出现)'
},
ismystarfriend: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '朋友是不是我的星标好友(0-不是 1-是)'
},
isblack: {
type: TINYINT(1),
allowNull: false,
defaultValue: 0,
comment: '是否将好友加入黑名单(0-不加入 1-加入)'
},
status: {
type: ENUM,
values: ["pending", "refuse", "agree", "ignore"],
allowNull: false,
defaultValue: "pending",
comment: "申请加好友状态(pending-申请中 refuse-拒绝 agree-同意 ignore-忽略)",
},
order: {
type: INTEGER,//不限定长度.默认int(11)
allowNull: true,
defaultValue: 50,
comment: '排序,默认50'
},
// sex: { type: ENUM, values: ['男','女','保密'], allowNull: true, defaultValue: '保密', comment: '留言用户性别'},
create_time: {
type: DATE,
allowNull: false,
defaultValue: app.Sequelize.fn('NOW'),
get() {
return app.formatTime(this.getDataValue('create_time'));
}
},
update_time: { type: DATE, allowNull: false, defaultValue: app.Sequelize.fn('NOW') },
});
// 模型关联
Goodfriendapply.associate = function (models) {
// 一个用户可以申请多个好友,用户对申请表是一对多, 反过来申请表对于用户表就是反向一对多
Goodfriendapply.belongsTo(app.model.User,{
// foreignKey: 'user_id',
});
};
return Goodfriendapply;
}