创建模型(表)
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 查询出来