ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

关联查询 一对一 (6)

2021-11-05 16:33:40  阅读:160  来源: 互联网

标签:一对一 Sequelize 关联 true Book User 查询 type id


创建模型(表)

 1 let User = sequelize.define('user', {
 2   id: {
 3     type: Sequelize.INTEGER,
 4     primaryKey: true,
 5     autoIncrement: true
 6   },
 7   name: {
 8     type: Sequelize.STRING,
 9     allowNull: false,
10     unique: true,
11   },
12   age: {
13     type: Sequelize.TINYINT,
14     defaultValue: 66,
15   },
16   gender: {
17     type: Sequelize.ENUM(['男', '女']),
18     defaultValue: '男',
19   }
20 });
 1 let Book = sequelize.define('book', {
 2   id: {
 3     type: Sequelize.INTEGER,
 4     primaryKey: true,
 5     autoIncrement: true
 6   },
 7   name: {
 8     type: Sequelize.STRING,
 9     allowNull: false,
10     unique: true
11   },
12   price: {
13     type: Sequelize.DOUBLE,
14     defaultValue: 66,
15   },
16   userId: { // 外键
17     type: Sequelize.INTEGER,
18     allowNull: false
19   }
20 });

建立一对一的关系

 1 // 一个用户拥有一本书
 2 User.hasOne(Book, { // 谁拥有谁 (User拥有一个Book)
 3   foreignKey: 'userId', // 外键
 4   sourceKey: 'id', // 外键引用的字段
 5 });
 6 // 一本书属于一个用户
 7 Book.belongsTo(User, { // 谁属于谁 (Book属性一个User)
 8   foreignKey: 'userId', // 外键
 9   sourceKey: 'id', // 外键引用的字段
10 });

创建表并添加数据

 1 ;(async () => {
 2   // 创建表
 3   await sequelize.sync({force: true});
 4   // 插入数据
 5   await User.create({
 6     id: 1,
 7     name: 'zs',
 8     age: 33,
 9     gender: '男',
10   });
11   await User.create({
12     id: 2,
13     name: 'ls',
14     age: 44,
15     gender: '女'
16   });
17   await User.create({
18     id: 3,
19     name: 'ww',
20     age: 55,
21     gender: '男'
22   });
23   await Book.create({
24     id: 1,
25     name: 'javascript',
26     price: 99.99,
27     userId: 1
28   });
29 })();

关联查询

 const u = await User.findOne({
    where: {
      id: 1
    },
    // 建立关联后可以通过include将对应书查询出来 
    include: {       model: Book
    }
  });
console.log(u.dataValues.book.dataValues);
 1 const b = await Book.findOne({
 2     where: {
 3       id: 1,
 4     },
 5     // 建立关系后 可以在查询书的时候将对应的人查询出来
 6     include: {
 7       model: User
 8     }
 9   });
10   console.log(b.dataValues.user.dataValues);
  • 建立了用户和书的关系后 可以在查询用户的时候通过 include 将书的信息查询出来 
  • 建立了书和用户的关系后 可以在查询书的时候通过 include 将用户的信息也查询出来
  • 没有建立关系,不能通过 include 查询出来

 

标签:一对一,Sequelize,关联,true,Book,User,查询,type,id
来源: https://www.cnblogs.com/xiebenyin-/p/15513887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有