egg-sequelize文档 https://www.eggjs.org/zh-CN/tutorials/sequelize

统一以 UserModel为例,来做增删查改

create新增

Model.create 相当于 build save两步合并

  1. const now = Date.now();
  2. const user = await UserModel.create({
  3. id: 1, username: 'lucy', createdAt: now, updatedAt: now
  4. });

bulkCreate批量新增

默认不会运行验证器,需要手动开启

  1. User.bulkCreate(
  2. [
  3. { username: 'foo' },
  4. { username: 'bar', admin: true }
  5. ],
  6. {
  7. validate: true, // 手动开启验证器
  8. fields: ['username'] // 限制字段
  9. }
  10. );
  11. // 因为限制了字段只存username,foo 和 bar 都不会是管理员

find查询

  • include 参数对应sql的join连接操作
  • findAll 查找所有的
  • findByPk 根据主键查找
  • findOne 找到第一个实例
  • findOrCreate 查找到或创建实例
  • findCreateFind
  • findAndCountAll 分页查找

findAll

  1. const allUser = await UserModel.findAll();
  2. // 条件查找
  3. const allUser = await UserModel.findAll({
  4. where: {
  5. name: {$like: '%lu%'}, // 模糊查询
  6. status: 1, // 精确查询
  7. },
  8. });

findAndCountAll分页查询

  1. // 分页查找
  2. const page = 1, // 页码
  3. const limit = 10; // 每页显示多少条数据,默认 10
  4. const allUser = await UserModel.findAndCountAll({
  5. where: {
  6. name: {$like: '%lu%'}, // 模糊查询
  7. status: 1, // 精确查询
  8. limit,
  9. offset: limit * (page-1),
  10. },
  11. });

findOne

  1. const oneUser = await UserModel.findOne(id)

findByPk

  1. const oneUser = await UserModel.findByPk(23)

count,max, min,sum

update更新

Model.update
相当于 set, save两步合并,通常就直接修改实例属性,然后save()更新
data 里面如果带有 id 则更新,不带则新建

  1. // 01
  2. await UserModel.update({id: 1, username: 'lucy'});
  3. // 02
  4. const user = await UserModel.findById(id);
  5. user.update(data);
  6. await UserModel.update({
  7. name: 'lucy'
  8. }, {
  9. where: {name: 'lily'}
  10. })

部分更新

通过传递一个列名数组,可以定义在调用 save 时应该保存哪些属性
save({fields:[ ‘name’,… ]}) 只更新数组里面的字段

upsert

destroy删除

Model.destroy

  1. // 01
  2. await UserModel.destroy({
  3. where: { username: 'lucy' },
  4. });
  5. // 02
  6. const user = await UserModel.findById(id);
  7. user.destroy();

paranoid软删除

Sequelize 支持 paranoid 表的概念,这意味着删除记录时不会真的删除,

  • 而是给字段deletedAt值设置为时间戳
  • 删除的时候默认是软删除,而不是硬删除

查询包含软删除的记录

  1. await UserModel.findAll({
  2. where: { id: 1 },
  3. paranoid: false
  4. });

restore恢复软删除

  1. UserModel.restore();
  2. UserModel.restore({
  3. where: {
  4. likes: {
  5. [Op.gt]: 100
  6. }
  7. }
  8. });

force硬删除

force: true 强制删除

  1. await Post.destroy({
  2. where: { id: 1 },
  3. force: true // 硬删除
  4. });

reload重载

Model.reload