关联查询 一对一 (6)
作者:互联网
创建模型(表)
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