sequelize常见用法
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
的中间表,里面包含了 role
和 menu
表的外键
多对多关联查询
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常见用法相关推荐
- mysql中正则表达式的用法_Mysql中正则表达式Regexp常见用法
Mysql中Regexp常见用法 模糊匹配,包含特定字符串 # 查找content字段中包含"车友俱乐部"的记录 select * from club_content where ...
- python六:常见数据类型以及常见用法
bool 布尔值 # 在bool中 0,()(空元祖),[](空列表),{}(空字典),None,""(空字符串) 都是False int 整形 float 浮点型 str 字符串 ...
- vue-router 的常见用法
vue-router 的常见用法 1. 路由重定向 路由重定向指的是:用户在访问地址 A 的时候,强制用户跳转到地址 C ,从而展示特定的组件页面. 通过路由规则的 redirect 属性,指定一个新 ...
- 空的宏定义作用及常见用法
空的宏定义作用及常见用法 我们学习宏定义的第一个概念是,宏定义作为替换作用. 例如: #define SIZE 32 // 接下来代码使用SIZE就相当于32 宏定义是编译器在编译时,将程序中所有SI ...
- Arrays常见用法
Arrays常见用法
- sed文本处理常见用法
sed文本处理常见用法 2011-06-24 TsengYia#126.com http://tsengyia.blog.chinaunix.net/ ################## ...
- typeset的常见用法
[保留] typeset的常见用法 http://www.chinaunix.net 作者:寂寞烈火 发表于:2007-12-16 09:50:34 [发表评论] [查看原文] [Shell讨论区] ...
- 框架前期准备篇之AutoFac常见用法总结 转载
框架前期准备篇之AutoFac常见用法总结 一. 说在前面的话 凡是大约工作在两年以上的朋友们,或多或少都会接触到一些框架搭建方面的知识,只要一谈到框架搭建这个问题或者最佳用法这个问题,势必会引起一点 ...
- Java集合Collection与List的关系、常见用法
关系树 [java] view plain copy print? ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, 查找快 ...
最新文章
- 使用DML语句【weber出品必属精品】
- Linux内核移植之四:内核启动过程
- C++在构造函数中调用构造函数
- C++ :: 的用法小结
- (转载)jQuery 1.6 源码学习(一)——core.js[1]之基本架构
- 这谁写的技术文档?我想锤死他...
- 如何在Hybris Backoffice里给用户维护电话号码
- 重口味动漫_每种口味的图标样式
- iPhone 12发布前夜:富士康奖励万元招不到人,有工人国庆连轴转
- java 人脸识别 demo_基于虹软sdk,java实现人脸识别(demo)
- delphi 10.4来了
- [Bug]Superset通过pyhive连接Spark SQL表名获取失败
- 怎么将几张pdf合并成一张_怎么把多个PDF合并成一个PDF?分享合并PDF文件最简单的方法...
- A 股历年三大财务报表
- Mac-显示隐藏文件-快捷键与命令行
- 结构为王——确定分析思路(数据分析方法论)
- ISP成像算法基础Day1—Python基础
- lightbox图片展示效果
- margin设置百分比
- JavaSE基础之(十六)final关键字
热门文章
- 计算机原理形考3,国开学习网电大混凝土结构设计原理形考任务三答案
- 2022年区块链市场分析报告(共100份)
- x11 vnc rdp
- 动态加载的函数库Dynamically Loaded (DL) Libraries
- AlphaFold2初体验
- java中用关键字为共享资源加锁_利用synchronized实现线程同步的案例讲解
- 卡顿、掉线、出异常?远程会议的“社死”瞬间怎么办?
- java实现拼图小游戏(包括打包exe)
- 山东大学软件学院网络攻击与防范21年往年题回忆版+答案整理
- 自然语言处理 特征提取