Egg-sequelize学习笔记

2019-03-06  本文已影响0人  果子煎饼同学

模型关联

1.定义模型

user表:

      id: { type: INTEGER, primaryKey: true, autoIncrement: true },
      username: STRING(32),
      password: STRING(32),
      status: INTEGER, // 启用状态 1为启用 0为关闭
      userimg: STRING(200),
      created_at: DATE,
      updated_at: DATE,

auth_group表(记录用户权限表):

      id: { type: INTEGER, primaryKey: true, autoIncrement: true },
      title: STRING(50), // 用户title
      rules: STRING(500),
      status: INTEGER, // 是否启用 0 禁用 1 启用
      created_at: DATE,
      updated_at: DATE,

auth_group_access表(中间表,连接auth_group与user表):

      uid: INTEGER, // user表ID
      group_id: INTEGER, // 对应auth_groupID
      created_at: DATE,
      updated_at: DATE,

auth_rule表(权限表):

      id: { type: INTEGER, primaryKey: true, autoIncrement: true },
      route: STRING(200), // 路由地址
      name: STRING(200), // 接口名称
      status: INTEGER, // 启用状态 1为开启 0为关闭
      created_at: DATE,
      updated_at: DATE,
      ismenu: INTEGER, // 是否是菜单 0 不是菜单 1 是菜单
      prent_id: INTEGER, // 菜单父级ID
      icon: STRING(200), // 菜单图标
      show: INTEGER, // 菜单是否展示 1为展示0为隐藏
      sort: INTEGER, // 菜单排序

2.一对一关系

// 在USER模型中编写
Model.associate = function() {
    app.model.User.hasOne(app.model.AuthGroupAccess, { foreignKey: 'uid'});
    // foreignKey的值为AuthGroupAccess表中的外键(对应user表里ID的字段)
  }
// controller调用 
const result = await app.model.User.findAll({
  include: {
    model: app.model.AuthGroupAccess,
      // include: { // 如果还有关联就内嵌
      //    model: app.model.xxx,
      // }
  },
});

以上写法可以通过user找到AuthGroupAccess表里的数据,如果由AuthGroupAccess表来找user表的数据应该这么写:

3.多对多关系

有中间表的实现:

user表的ID对应auth_group_access表中的uid

auth_group表中的id对应auth_group_access表中的group_id

// User 模型中
Model.associate = function() {
    app.model.User.belongsToMany(app.model.AuthGroup, { through: app.model.AuthGroupAccess, foreignKey: 'uid' }); // foreignKey的值为:User表的ID与auth_group_access(中间表)对应的字段         名,through为中间表的模型
}
// AuthGroup 模型中
Model.associate = function() {
    app.model.AuthGroup.belongsToMany(app.model.User, { through: app.model.AuthGroupAccess, foreignKey: 'group_id' }); // foreignKey的值为:AuthGroup表的ID与auth_group_access(中间表)对应    的字段名,through为中间表的模型
}
上一篇下一篇

猜你喜欢

热点阅读