博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sequelize 管理查询——一对一关联查询
阅读量:6276 次
发布时间:2019-06-22

本文共 2289 字,大约阅读时间需要 7 分钟。

sequelize 提供了两种一对一关系关联方法 belongsTo 和 hasOne

拿users和userInfo这两个model来说,首先我们需要创建这两个model,

创建model

const User = Sequelize.defin('users', { // 创建user model      id: {        autoIncrement: true, // 自动递增        type: Sequelize.INTEGER,        primaryKey: true // 声明主键      },      username: {        type: Sequelize.STRING      },      password: {        type: Sequelize.STRING      },      nick_name: {        type: Sequelize.STRING      },      email: {          type: Sequelize.STRING      }    });        const UserInfo = const UserInfo = db.defineModel('user_info', { // 创建userInfo model      id: {        autoIncrement: true, // 自动递增        type: Sequelize.INTEGER,        primaryKey: true // 声明主键      },      uid: {        type: Sequelize.INTEGER,        unique: true      },      blog_url: {        type: Sequelize.STRING      },      portrait_url: {        type: Sequelize.STRING      },      address: {        type: Sequelize.STRING      }    });

建立关联关系

// belongsTo    User.belongsTo(UserInfo, { foreignKey: 'id', as: 'info' })    //hasOne    User.hasOne(UserInfo, { foreignKey: 'uid', as: 'info' })
这两个方法都是两个参数第一个参数为一个Model,第二个为options配置,options常用两个属性分别是foreignKey 指定外键,和as 指定别名。
两种方法都是把userInfo表关联到User表,区别是暴露外键的表不同,belongsTo暴露出的是User表的‘id’字段作为外键去查询UserInfo表,而hasOne方法暴露的是UserInfo表的‘uid’作为外键查询

使用关联查询

User.findeOne({        // where: {}, user的查询条件        include: {            model: UserInfo, // 关联查询            as: 'info' // 别名            // where: {} // userInfo的查询条件        }    })
注意!如果要使用别名,建立关系的时候要在第二个参数下设置as属性,同时在include内设置as属性。as的别名会在获取到的数据结构体现为你设置的别名。

其中belongsTo 生成的sql 如下

SELECT `users`.`id`, `users`.`username`, `user_info`.`id` AS `user_info.id`, `user_info`.`address` AS `user_info.address` FROM `users` AS `users` LEFT OUTER JOIN `user_info` AS `user_info` ON `users`.`id` = `user_info`.`id`;

hasOne 生成的sql 如下

SELECT `users`.`id`, `users`.`username`, `user_info`.`id` AS `user_info.id`, `user_info`.`address` AS `user_info.address` FROM `users` AS `users` LEFT OUTER JOIN `user_info` AS `user_info` ON `users`.`id` = `user_info`.`uid`;

观察这两条sql,LEFT OUTER JOIN user_info AS user_info ON users.id = user_info.id和LEFT OUTER JOIN user_info AS user_info ON users.id = user_info.uid 你是不是明白了些什么。

belongsTo 是根据User的外键作为条件去查询UserInfo的主键。hasOne是根据UserInfo的外键作为条件去查询User的主键

转载地址:http://lagpa.baihongyu.com/

你可能感兴趣的文章
Django 文件下载功能
查看>>
走红日本 阿里云如何能够赢得海外荣耀
查看>>
磁盘空间满引起的mysql启动失败:ERROR! MySQL server PID file could not be found!
查看>>
点播转码相关常见问题及排查方式
查看>>
[arm驱动]linux设备地址映射到用户空间
查看>>
弗洛伊德算法
查看>>
【算法之美】求解两个有序数组的中位数 — leetcode 4. Median of Two Sorted Arrays
查看>>
精度 Precision
查看>>
Android——4.2 - 3G移植之路之 APN (五)
查看>>
Linux_DHCP服务搭建
查看>>
[SilverLight]DataGrid实现批量输入(like Excel)(补充)
查看>>
秋式广告杀手:广告拦截原理与杀手组织
查看>>
翻译 | 摆脱浏览器限制的JavaScript
查看>>
闲扯下午引爆乌云社区“盗窃”乌云币事件
查看>>
02@在类的头文件中尽量少引入其他头文件
查看>>
JAVA IO BIO NIO AIO
查看>>
input checkbox 复选框大小修改
查看>>
网吧维护工具
查看>>
BOOT.INI文件参数
查看>>
vmstat详解
查看>>