egg-sequelize文档 https://www.eggjs.org/zh-CN/tutorials/sequelize
统一以 UserModel为例,来做增删查改
create新增
Model.create 相当于 build save两步合并
const now = Date.now();const user = await UserModel.create({id: 1, username: 'lucy', createdAt: now, updatedAt: now});
bulkCreate批量新增
默认不会运行验证器,需要手动开启
User.bulkCreate([{ username: 'foo' },{ username: 'bar', admin: true }],{validate: true, // 手动开启验证器fields: ['username'] // 限制字段});// 因为限制了字段只存username,foo 和 bar 都不会是管理员
find查询
- include 参数对应sql的join连接操作
- findAll 查找所有的
- findByPk 根据主键查找
- findOne 找到第一个实例
- findOrCreate 查找到或创建实例
- findCreateFind
- findAndCountAll 分页查找
findAll
const allUser = await UserModel.findAll();// 条件查找const allUser = await UserModel.findAll({where: {name: {$like: '%lu%'}, // 模糊查询status: 1, // 精确查询},});
findAndCountAll分页查询
// 分页查找const page = 1, // 页码const limit = 10; // 每页显示多少条数据,默认 10const allUser = await UserModel.findAndCountAll({where: {name: {$like: '%lu%'}, // 模糊查询status: 1, // 精确查询limit,offset: limit * (page-1),},});
findOne
const oneUser = await UserModel.findOne(id)
findByPk
const oneUser = await UserModel.findByPk(23)
count,max, min,sum
update更新
Model.update
相当于 set, save两步合并,通常就直接修改实例属性,然后save()更新
data 里面如果带有 id 则更新,不带则新建
// 01await UserModel.update({id: 1, username: 'lucy'});// 02const user = await UserModel.findById(id);user.update(data);await UserModel.update({name: 'lucy'}, {where: {name: 'lily'}})
部分更新
通过传递一个列名数组,可以定义在调用 save 时应该保存哪些属性
save({fields:[ ‘name’,… ]}) 只更新数组里面的字段
upsert
destroy删除
Model.destroy
// 01await UserModel.destroy({where: { username: 'lucy' },});// 02const user = await UserModel.findById(id);user.destroy();
paranoid软删除
Sequelize 支持 paranoid 表的概念,这意味着删除记录时不会真的删除,
- 而是给字段deletedAt值设置为时间戳
- 删除的时候默认是软删除,而不是硬删除
查询包含软删除的记录
await UserModel.findAll({where: { id: 1 },paranoid: false});
restore恢复软删除
UserModel.restore();UserModel.restore({where: {likes: {[Op.gt]: 100}}});
force硬删除
force: true 强制删除
await Post.destroy({where: { id: 1 },force: true // 硬删除});
reload重载
Model.reload
