eggjs 使用sequelize问题记录一下,后续继续补存

169 阅读1分钟

eggjs 使用sequelize遇到问题记录一下,后续遇到问题继续补存

profile-avatar

1.使用sequelize创建一张表

//使用命令行
npx sequelize migration:generate --name=user 
//在创建的文章中编辑如下代码,我们可以看到下面的代码没有id主键
module.exports = {
  async up(queryInterface, Sequelize) {
    const { INTEGER, STRING, DATE, ENUM } = Sequelize
    await queryInterface.createTable('user_role', {
      user_id: {
        type: INTEGER(20).UNSIGNED,
      },
      role_id: {
        type: INTEGER(20).UNSIGNED,
      },
      creator: {
        type: STRING(30),
        allowNull: false,
        defaultValue: '',
        comment: '创建人',
      },
      created_at: DATE,
      updated_at: DATE,
    })
  },

  async down(queryInterface, Sequelize) {
    await queryInterface.dropTable('user_role')
  },
}

2.创建的表没有id,在findOned的时候报错

//执行如下代码
let roles = await app.model.UserRole.findOne({
  where: {
    user_id: ctx.authUser.id,
  },
})
//报错
Unknown column 'id' in 'field list'
复制代码
  1. 怎么解决呢在model中如下添加一句 UserRole.removeAttribute('id')
export default (app) => {
  const { INTEGER, STRING, DATE } = app.Sequelize
  const UserRole = app.model.define('user_role', {
    user_id: {
      type: INTEGER(20).UNSIGNED,
    },
    role_id: {
      type: INTEGER(20).UNSIGNED,
    },
    creator: {
      type: STRING(30),
      allowNull: false,
      defaultValue: '',
      comment: '创建人',
    },
    created_at: DATE,
    updated_at: DATE,
  })
  UserRole.removeAttribute('id')
  return UserRole
}

复制代码
  1. 再次执行查询不再报错
let roles = await app.model.UserRole.findOne({
  where: {
    user_id: ctx.authUser.id,
  },
})