sequelize常见用法

sequelize常见用法sequelize 常见用法查询表中某个字段不重复的所有数据 awaitModel findAll attributes sequelize fn DISTINCT sequelize col col name alias 批量删除 awaitModel destroy where id Op in ids 分页 排序 模糊查询搜索 查询状态 Menu 表自身与自身关联 Menu hasMany Me

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) : 1 const { 
    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 } } 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226221.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 上午7:35
下一篇 2026年3月17日 上午7:35


相关推荐

  • 《深入浅出MFC》观后有感

    《深入浅出MFC》观后有感    《深入浅出MFC》观后有感本文原创,如需转载,请注明出处!     好几年前我曾经买过这本书,知道它是本好书,在匆匆走马观看一遍后,便将它束之高阁,后来有友人借之,不想几经辗转,最终不知我的这本好书花落谁家了。这段时间有空,得知一位友人也买了此书,便借来再读。再读的同时,回想这几年使用MFC的经历,顿觉获益良多,深受启发,遂成此文。          翻开此书,到内容简介后面一页

    2022年6月22日
    32
  • Mac环境变量的配置

    Mac环境变量的配置Mac系统下进行PATH配置1.打开配置文件vi ~/.bash_profile2.编辑配置文件export路径名=/Users/…/PATH=$路径名:$PATH 3.保存配置文件终端:键入esc键终端:输入:wq,退出4.立即生效终端:键入source ~/.bash_profile测试配置是否成功…

    2022年6月16日
    74
  • Oracle SQL Developer 连接数据库

    Oracle SQL Developer 连接数据库OracleSQLDev 连接数据库今天在连接 sqldeveloper 服务器时遇到了很多问题 但最终还是通过网上的博客解决了问题 我就在总结一下我的解决过程 一 界面首先 OracleSQLDev 的连接数据库界面是这样的 先填写连接名 用户名 以及口令 Oracle 提供了 system scott 等多种用户名 这里填写 Scott 因为 Scott 中有几张用

    2026年3月19日
    2
  • 联想服务器查raid型号,联想服务器所配备常见SAS RAID卡规格汇总

    联想服务器查raid型号,联想服务器所配备常见SAS RAID卡规格汇总故障现象 联想服务器已有万全 ThinkServer Systemx 及 ThinkSystem 四条产品线和十余代产品 各代产品所配备的 SASRAID 卡互有交叉 这里对采用 LSI Avago 芯片的 SASRAID 卡进行一个资料整理 原因分析 LSI 的阵列卡有以下几种工作模式 MR MegaRAID 模式 使用 RoC 芯片硬件实现 RAID 功能 常见的带缓存的阵列卡工作在此模式 如 ServeRAID

    2025年12月6日
    7
  • C语言括号匹配(栈括号匹配c语言)

    给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的(),[],{}是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20)输出样例1:yes输入样例2:{[}]输出样例2:no思路:题目输入一些字符串,我们就先保留括号之类的,判断是否匹配。如果遇到左括号,就入栈,如果遇到一个右括号,就与栈顶元

    2022年4月13日
    34
  • JAVA统计服务器资源(cpu,内存,磁盘)–LINUX

    JAVA统计服务器资源(cpu,内存,磁盘)–LINUX标题JAVA统计服务器资源(cpu,内存,磁盘)–LINUX使用类:com.sun.management.OperatingSystemMXBean继承:java.lang.management.OperatingSystemMXBeanJDK版本1.8API说明项目用的jdk是1.8,接口也能调,不知道为什么1.8的api里没有这个类,只有这个类继承的java.lang.management.OperatingSystemMXBean的API,在JDK13API中找到想要的东西了模

    2022年6月10日
    89

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号