关联查询 一对多的第二种方式 (8)

创建模型 (表)

 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     references: { // 外键
20       mode: User, // 引用的是User表
21       key: 'id', //  中的 id 字段
22     }
23   }
24 });

建立关系

1 // 一个用户拥有多本书
2 User.hasMany(Book);
3 // 一本书属于一个用户
4 Book.belongsTo(User);
  • 在定义Book模型(表)的时候通过 references 指定外键引用哪个 mode (模型)的哪个 key 字段

创建表并插入数据

 1 ;(async () => {
 2   await sequelize.sync({force: true});
 3   await User.create({
 4     id: 1,
 5     name: 'zs',
 6     age: 33,
 7     gender: '男'
 8   });
 9   await Book.create({
10     id: 1,
11     name: 'javascript',
12     price: 99.99,
13     userId: 1
14   });
15   await Book.create({
16     id: 2,
17     name: 'sequelize',
18     price: 66.66,
19     userId: 1
20   });
21 })();

关联查询

 1 // 关联查询 (在20行后面插入)
 2   const u = await User.findOne({
 3     where: {
 4       id: 1
 5     },
 6     include: {
 7       model: Book
 8     }
 9   });
10   console.log(u.dataValues.books);

 

posted @ 2021-11-05 17:33  霸哥yyds  阅读(56)  评论(0)    收藏  举报