使用orm(Sequelize) 操作 MySQL (2)
来源:互联网 发布:反相比例运算电路数据 编辑:程序博客网 时间:2024/04/30 02:37
前面有篇文章我讲了一些当数据库比较简单, 数据间不存在关联时的一些基本操作, 这次我们讲讲数据关系(association)的建立以及当数据存在关联时相应的操作
代码模板
'use strict';let co = require("co");let _ = require("underscore");let Sequelize = require("sequelize");let Database = new Sequelize( 'test', // 要连接的数据库 'username', // 数据库用户名 'password', // 密码 { 'dialect': 'mysql', // 数据库使用mysql 'host': 'localhost', // 数据库服务器ip 'port': 3306, // 数据库运行端口 'timestamp': true // 这个参数为true是MySQL会自动给每条数据添加createdAt和updateAt字段 });/*数据表定义代码放这里*/co(function*() { /*增删改查等操作放此处*/}).catch(function (error) { console.log(error);});
Sequelize提供的三种关系
One to One association (1:1关系)
sequelize 提供了hasOne, belongsTo 两个API供我们使用, 我们先定义一下表:
//在同一个博客园,一个用户只有一个博客let User = Database.define("User", { name: Sequelize.STRING, code: Sequelize.NUMBER});let Blog = Database.define("Blog", { name: Sequelize.STRING, url: Sequelize.STRING});
hasOne 和 belongsTo 具体的用法
// belongsToBlog.belongsTo(User); // 会在blog数据中添加外键userIdBlog.belongsTo(User, {as: "writer"}); // 会在blog数据中添加外键writerIdBlog.belongsTo(User, {foreignKey: "writer"}); // 会在blog数据中添加外键writer// hasOneUser.hasOne(Blog); // 会在user数据中添加外键blogIdUser.hasOne(Blog, {as: "myBlog"}); // 会在blog数据中添加外键myBlogIdUser.hasOne(Blog, {foreignKey: "blog"}); // 会在blog数据中添加外键blog
hasOne和belongsTo的区别
上文中每句代码的作用都是一样的, 都是给Blog和User绑定一对一关系, 它们的区别在于, 使用 belongsTo
的时候会在Blog中添加外键userId
, 使用hasOne
则是在User中添加外键 blogId
.
as的用法
针对Blog.belongsTo(User, {as: "writer"});
, 其实as就是在Blog表中将User表的表名变为writer, 之后sequelize根据驼峰命名法 命名外键: writer + id –> writerId, 如果没有设置as, 则是 User + id –> userId
One-To-Many (1:n关系)
针对这个关系, sequelize 提供了hasMany , 先添加一个文章数据表
let Article = Database.define("Article", { title: Sequelize.STRING, content: Sequelize.STRING});
hasMany 的具体用法:
// 使用asBlog.hasMany(Article, {as: "articles"}); // 会在article数据中添加外键blogIdArticle.belongsTo(Blog);// 使用foreignKeyBlog.hasMany(Article, {foreignKey: "blog"}); // 会在article数据中添加外键blogArticle.belongsTo(Blog, {foreignKey: "blog"});// 同时使用as和foreignKeyBlog.hasMany(Article, {foreignKey: "blog"}); // 会在article数据中添加外键blogArticle.belongsTo(Blog, {as: "articles", foreignKey: "blog"}); //查询blog时, 可以填充articles字段
Belongs-To-Many(n:m关系)
一篇文章可能出现在多个分类中, 一个分类中可能有多篇文章, 两者间的关系需要有一个关联, 先定义分类数据表以及两者关联的文章分类表:
let Category = Database.define({ name: Sequelize.STRING});let ArticleCategory = Database.define("ArticleCategory");
belongsToMany 的用法
Article.belongsToMany(Category, {through: "ArticleCategory"});Category.belongsToMany(Article, {through: "ArticleCategory"});/*ArticleCategory表包含两个字段: articleId, categoryId*/
Sequelize提供的拓展方法
belongsTo 和 hasOne的拓展方法
Blog.belongsTo(User); //Sequelize会给Blog表数据扩展getUser, setUser, createUser方法Blog.belongsTo(User, {as: "writer"}); //Sequelize会给User表数据扩展getUser, setUser, createUser方法User.hasOne(Blog); //Sequelize会给User表数据扩展getBlog, setBlog, createBlog方法
hasMany的拓展方法
Blog.hasMany(Article);//Sequelize会给Blog表数据扩展getArticles, setArticles, addArticle, addArticles, createArticle, removeArticle, removeArticles, hasArticle, hasArticles, countArticles方法
belongsToMany的扩展方法
和hasMany相同
后记
后面还有一些具体的操作要写, 但是由于boss新给了个比较急的任务, 检查公司业务代码中存在的内存泄漏问题, 所以后续的一些等新的任务完成之后再更新.
0 0
- 使用orm(Sequelize) 操作 MySQL (2)
- 使用orm(Sequelize) 操作 MySQL (1)
- Node.js使用Sequelize操作MySQL
- Node.js使用Sequelize ORM框架
- node.js和MySQL使用Sequelize
- ORM DB for nodejs--sequelize
- MP 新版本 [2 mysql sequelize 搭建数据库]
- node.js-ORM数据库框架sequelize使用总结 超时查询、缓存查询、多表关联查询
- Sequelize 常用操作demo
- Sequelize和MySQL对照
- Sequelize 和 MySQL 对照
- Sequelize和MySQL对照
- sequelize调用mysql函数
- Sequelize 和 MySQL 对照
- Sequelize 和 MySQL 对照
- node orm sequelize model-table 互相生成
- NODE.JS ORM之sequelize 框架
- Nodejs ORM框架Sequelize快速入门
- R语言正则表达式
- 释放xcode占用硬盘空间 (转)
- System.arraycopy 实现多次点击
- DICOM通信 - PDU数据包(2)
- Android长按Power键弹出关机Dialog框GlobalActions解析
- 使用orm(Sequelize) 操作 MySQL (2)
- hibernate中的addEntity setResultTransformer的比较
- 和Linux大魔王一起愉快的玩耍(二)make命令和mekefile
- 深度工具合集安装(Nvidia+CUDA+cuDNN+Tensorflow+OpenBLAS+Caffe+Theano+Keras+Torch+Mxnet+X2Go)
- PHP安全过滤函数
- 配置高可用的Hadoop平台
- Ecshop实现微信第三方授权扫码登录
- 仿照linux下的uboot来DIY自己的arm11(6410)的bootloader
- LeetCode 27. Remove Elemen