sequelize 常见用法

建表设置某个字段独一无二

unique: true

  username: {type: DataTypes.STRING,allowNull: false,comment: '用户名',unique: true},

查询表中某个字段不重复的所有数据

await Model.findAll({attributes: [[sequelize.fn('DISTINCT', sequelize.col('col_name')), 'alias']],
})

批量删除

await Model.destroy({where: {id: {[Op.in]: ids}}
})

分页、排序、模糊查询搜索、查询状态

Menu 表自身与自身关联

Menu.hasMany(Menu, { as: 'children', foreignKey: 'pid', through: null })

自身与自身关联多条件查询

// 查询(分页、排序、模糊查询搜索、查询状态)
/*** limit 提取多少行,offset 跳过多少行* @param {*} page 当前页码* @param {*} size 每页条数*/
async function findAll (query) {try {const size = query.size ? parseInt(query.size) : 10 // 如果没传参数设置一个默认值const page = query.page ? parseInt(query.page) : 1const { count, rows } = await Menu.findAndCountAll({include: {model: Menu,as: 'children',include: {model: Menu,as: 'children',include: {model: Menu,as: 'children',include: {model: Menu,as: 'children'}}}},where: {pid: null,status: {[Op.like]: query.status ? `%${JSON.parse(query.status) ? 1 : 0}%` : '%%' // 查询状态},[Op.or]: [ // 模糊查询{ name: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ icon: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ component: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ type: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ remark: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ ctime: { [Op.like]: query.search ? `%${query.search}%` : '%%' } },{ mtime: { [Op.like]: query.search ? `%${query.search}%` : '%%' } }],},offset: (page - 1) * size,limit: size,distinct: true, // 避免分页出的总数和实际数不匹配order: [[query.order ? query.order : 'ctime', query.sort ? query.sort : 'desc'] // 使用 Element 表格中的排序是互斥的,所以每次排序只能排一个元素的]})return {count,data: rows}} catch (error) {throw error}
}

一对多关联

Permission.belongsTo(Tag, { as: 'tid', foreignKey: 'tag', through: null }) // Permission -> Tag: 一对多

一对多关联查询

await Permission.findAndCountAll({include: [{model: Tag,as: 'tid',attributes: ['id', 'name'],}], // 关联查询
})

多对多关联

Role.belongsToMany(Menu, { through: 'role_menu', as: 'role_menu' })
Menu.belongsToMany(Role, { through: 'role_menu', as: 'role_menu' })

可能添加 as 报别名重复的错误,可以不使用 as
会创建一个名为 role_menu 的中间表,里面包含了 rolemenu 表的外键

多对多关联查询

await Role.findAndCountAll({include: [{model: Menu,as: 'menus',attributes: ['id', 'name'],through: { attributes: [] } // 隐藏中间表字段}]
}

多对多中间表的操作

role_menu 中间表为例

sequelize 提供了 addMenus()setMenus() 等方法可以对中间表增删改查的操作

async function setRoleMenu (data) {try {const role = await Role.findOne({ // 找到对应的 role 对象where: { id: data['roleId'] }})const menus = await Menu.findAll({ // 找到对应的 menuIds的对象where: { id: data['menuIds'] }})return await role.setMenus(menus) // 通过 setMenus 方法在 role_menu 表中添加/修改记录} catch (error) {throw error}
}

sequelize常见用法相关推荐

  1. mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法

    Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...

  2. python六:常见数据类型以及常见用法

    bool 布尔值 # 在bool中 0,()(空元祖),[](空列表),{}(空字典),None,""(空字符串) 都是False int 整形 float 浮点型 str 字符串 ...

  3. vue-router 的常见用法

    vue-router 的常见用法 1. 路由重定向 路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面. 通过路由规则的 redirect 属性,指定一个新 ...

  4. 空的宏定义作用及常见用法

    空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...

  5. Arrays常见用法

    Arrays常见用法

  6. sed文本处理常见用法

    sed文本处理常见用法    2011-06-24  TsengYia#126.com http://tsengyia.blog.chinaunix.net/   ################## ...

  7. typeset的常见用法

    [保留] typeset的常见用法 http://www.chinaunix.net 作者:寂寞烈火  发表于:2007-12-16 09:50:34 [发表评论] [查看原文] [Shell讨论区] ...

  8. 框架前期准备篇之AutoFac常见用法总结 转载

    框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...

  9. Java集合Collection与List的关系、常见用法

    关系树 [java] view plain copy print? ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快 ...

最新文章

  1. 使用DML语句【weber出品必属精品】
  2. Linux内核移植之四:内核启动过程
  3. C++在构造函数中调用构造函数
  4. C++ :: 的用法小结
  5. (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构
  6. 这谁写的技术文档?我想锤死他...
  7. 如何在Hybris Backoffice里给用户维护电话号码
  8. 重口味动漫_每种口味的图标样式
  9. iPhone 12发布前夜:富士康奖励万元招不到人,有工人国庆连轴转
  10. java 人脸识别 demo_基于虹软sdk,java实现人脸识别(demo)
  11. delphi 10.4来了
  12. [Bug]Superset通过pyhive连接Spark SQL表名获取失败
  13. 怎么将几张pdf合并成一张_怎么把多个PDF合并成一个PDF?分享合并PDF文件最简单的方法...
  14. A 股历年三大财务报表
  15. Mac-显示隐藏文件-快捷键与命令行
  16. 结构为王——确定分析思路(数据分析方法论)
  17. ISP成像算法基础Day1—Python基础
  18. lightbox图片展示效果
  19. margin设置百分比
  20. JavaSE基础之(十六)final关键字

热门文章

  1. 计算机原理形考3,国开学习网电大混凝土结构设计原理形考任务三答案
  2. 2022年区块链市场分析报告(共100份)
  3. x11 vnc rdp
  4. 动态加载的函数库Dynamically Loaded (DL) Libraries
  5. AlphaFold2初体验
  6. java中用关键字为共享资源加锁_利用synchronized实现线程同步的案例讲解
  7. 卡顿、掉线、出异常?远程会议的“社死”瞬间怎么办?
  8. java实现拼图小游戏(包括打包exe)
  9. 山东大学软件学院网络攻击与防范21年往年题回忆版+答案整理
  10. 自然语言处理 特征提取