sequelize模型关联_Sequelize 系列教程之一对多模型关系

本文是 Sequelize 系列教程的一部分,主要讲解如何在 Sequelize 中设置和操作一对多(hasMany)模型关系。文章介绍了基本概念如 source 和 target,并通过示例展示了如何在 User 和 Project 模型之间建立一对多关联,以及如何进行添加、修改和删除操作。此外,还探讨了关系操作中的 SQL 语句和查询方法。
摘要由CSDN通过智能技术生成

Sequelize

是一个基于 Promise 的 Node.js ORM,目前支持 Postgres、 MySQL 、SQLite 和 Microsoft SQL Server。它具有强大的事务支持,关联关系、读取和复制等功能。在阅读本文前,如果你对 Sequelize 还不了解,建议先阅读Sequelize 快速入门 这篇文章。

数据模型中的表关系一般有三种:一对一、一对多、多对多。 Sequelize

为开发者提供了清晰易用的接口来定义关系、进行表之间的操作。本文我们将介绍在 Sequelize

中如何定义一对多的表关系。

基本概念

Source & Target

我们首先从一个基本概念开始,你将会在大多数关联中使用 source

和 target

模型。 假设您正试图在两个模型之间添加关联。 这里我们在 User

和 Project

之间添加一个 hasOne

关联。

const User = sequelize.define('User', {

name: Sequelize.STRING,

email: Sequelize.STRING

});

const Project = sequelize.define('Project', {

name: Sequelize.STRING

});

User.hasOne(Project);

User

模型(函数被调用的模型)是 source

。 Project

模型(作为参数传递的模型)是 target

HasMany

一对多关联将一个来源与多个目标连接起来。 而多个目标接到同一个特定的源。

const User = sequelize.define('user', {/* ... */})

const Project = sequelize.define('project', {/* ... */})

// 首先我们来定义一个 hasMany 关联

Project.hasMany(User, {as: 'Workers'})

这会将 projectId

属性添加到 User。 根据当前的设置,表中的列将被称为 projectId

或 project_id

。 Project 的实例将获得访问器 getWorkers

和 setWorkers

有时你可能需要在不同的列上关联记录,这时候你可以使用 sourceKey

选项:

const City = sequelize.define('city', { countryCode: Sequelize.STRING });

const Country = sequelize.define('country', { isoCode: Sequelize.STRING });

// 在这里,我们可以根据国家代码连接国家和城市

Country.hasMany(City, {foreignKey: 'countryCode', sourceKey: 'isoCode'});

City.belongsTo(Country, {foreignKey: 'countryCode', targetKey: 'isoCode'});

一对多关系

模型定义

model/user.js

const Sequelize = require("sequelize");

module.exports = sequelize => {

const User = sequelize.define("user", {

empId: {

type: Sequelize.STRING,

allowNull: false,

unique: true

}

});

return User;

};

model/note.js

const Sequelize = require("sequelize");

module.exports = sequelize => {

const Note = sequelize.define("note", {

title: {

type: Sequelize.CHAR(64),

allowNull: false

}

});

return Note;

};

数据库连接及关系定义

db.js

const Sequelize = require('sequelize');

const sequelize = new Sequelize(

'exe', // 数据库名称

'root', // 用户名

'', // 密码

{

host: 'localhost',

dialect: 'mysql',

operatorsAliases: false,

pool: {

max: 5,

min: 0,

acquire: 30000,

idle: 10000

}

});

sequelize

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值