关联查询 一对一 (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】


下一篇:sequelize Op 相关操作合集【转】