# 一、 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 更新时间
  1. 直接在phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。

# 创建表迁移文件并生成表

  1. 通过迁移命名创建goodfriend表:
  1. 创建迁移文件 命令:
npx sequelize migration:generate --name=goodfriend
  1. 创建迁移文件 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');
  }
};

  1. 执行迁移文件命令生成数据库表:
// 创建数据库
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 更新时间
  1. 直接在phpMyAdmin中根据表字段设计创建表,或者通过数据库插件写sql语句创建表。

# 创建表迁移文件并生成表

  1. 通过迁移命名创建goodfriendapply表:
  1. 创建迁移文件 命令:
npx sequelize migration:generate --name=goodfriendapply
  1. 创建迁移文件 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');
  }
};

  1. 执行迁移文件命令生成数据库表:
// 创建数据库
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;
}
更新时间: 2025年7月14日星期一下午1点34分