Skip to content

Commit 40b3c82

Browse files
committed
update v7-alpha.32
1 parent d3a357e commit 40b3c82

33 files changed

+1737
-1546
lines changed

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
name: Bug report
3-
about: Create a report to help improve翻译问题反馈
3+
about: Create a report to help improve(翻译问题反馈)
44
title: ''
55
labels: 'bug'
66
assignees: ''

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# 更新记录
22

3+
## 2023-06-19
4+
* master 分支同步到 7.0.0-alpha.23
5+
36
## 2022-02-10
47
* master 分支同步翻译到 v7 文档 7.1.0
58
* v6 文档启用单独分支
@@ -72,7 +75,9 @@
7275
### 更新
7376
* 同步官方最新文档版本 4.13.8
7477
* 翻译 getting-started.md
75-
* 翻译 models-definition.md* 翻译 models-usage.md* 翻译 querying.md
78+
* 翻译 models-definition.md
79+
* 翻译 models-usage.md
80+
* 翻译 querying.md
7681

7782
## 2017-07-14
7883

Readme.md

Lines changed: 47 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,26 @@
22

33
![](http://docs.sequelizejs.com/manual/asset/logo-small.png)
44

5-
[![npm version](https://badgen.net/npm/v/sequelize)](https://www.npmjs.com/package/sequelize)
6-
[![Build Status](https://github.com/sequelize/sequelize/workflows/CI/badge.svg)](https://github.com/sequelize/sequelize/actions?query=workflow%3ACI)
7-
[![npm downloads](https://badgen.net/npm/dm/sequelize)](https://www.npmjs.com/package/sequelize)
5+
[![npm version](https://badgen.net/npm/v/@sequelize/core)](https://www.npmjs.com/package/@sequelize/core)
6+
[![npm downloads](https://badgen.net/npm/dm/@sequelize/core)](https://www.npmjs.com/package/@sequelize/core)
7+
[![contributors](https://img.shields.io/github/contributors/sequelize/sequelize)](https://github.com/sequelize/sequelize/graphs/contributors)
8+
[![Open Collective](https://img.shields.io/opencollective/backers/sequelize)](https://opencollective.com/sequelize#section-contributors)
89
[![sponsor](https://img.shields.io/opencollective/all/sequelize?label=sponsors)](https://opencollective.com/sequelize)
9-
[![Last commit](https://badgen.net/github/last-commit/sequelize/sequelize)](https://github.com/sequelize/sequelize)
1010
[![Merged PRs](https://badgen.net/github/merged-prs/sequelize/sequelize)](https://github.com/sequelize/sequelize)
11-
[![GitHub stars](https://badgen.net/github/stars/sequelize/sequelize)](https://github.com/sequelize/sequelize)
12-
[![Slack Status](http://sequelize-slack.herokuapp.com/badge.svg)](http://sequelize-slack.herokuapp.com/)
13-
[![node](https://badgen.net/npm/node/sequelize)](https://www.npmjs.com/package/sequelize)
14-
[![License](https://badgen.net/github/license/sequelize/sequelize)](https://github.com/sequelize/sequelize/blob/main/LICENSE)
1511
[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)
12+
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
1613

17-
> 此项目同步自 [sequelize](https://github.com/sequelize) / [sequelize](https://github.com/sequelize/sequelize) 项目中的 docs.
14+
> 此项目同步自 [sequelize](https://github.com/sequelize) / [sequelize](https://github.com/sequelize/sequelize) 项目.
1815
>
1916
> 更新日志请参阅: [CHANGELOG](CHANGELOG.md)
2017
21-
Sequelize 是一个基于 promise 的 [Node.js](https://nodejs.org/zh-cn/about/) [ORM 工具](https://en.wikipedia.org/wiki/Object-relational_mapping), 目前支持 [Postgres](https://en.wikipedia.org/wiki/PostgreSQL), [MySQL](https://en.wikipedia.org/wiki/MySQL), [MariaDB](https://en.wikipedia.org/wiki/MariaDB), [SQLite](https://en.wikipedia.org/wiki/SQLite) 以及 [Microsoft SQL Server](https://en.wikipedia.org/wiki/Microsoft_SQL_Server), [Amazon Redshift](https://docs.aws.amazon.com/redshift/index.html)[Snowflake’s Data Cloud](https://docs.snowflake.com/en/user-guide/intro-key-concepts.html). 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能.
18+
Sequelize 是一个易用且基于 promise 的 [Node.js](https://nodejs.org/en/about/) [ORM 工具](https://en.wikipedia.org/wiki/Object-relational_mapping) 适用于 [Postgres](https://en.wikipedia.org/wiki/PostgreSQL), [MySQL](https://en.wikipedia.org/wiki/MySQL), [MariaDB](https://en.wikipedia.org/wiki/MariaDB), [SQLite](https://en.wikipedia.org/wiki/SQLite), [DB2](https://en.wikipedia.org/wiki/IBM_Db2_Family), [Microsoft SQL Server](https://en.wikipedia.org/wiki/Microsoft_SQL_Server), [Snowflake](https://www.snowflake.com/), [Oracle DB](https://www.oracle.com/database/)[Db2 for IBM i](https://www.ibm.com/support/pages/db2-ibm-i). 它具有强大的事务支持, 关联关系, 预读和延迟加载,读取复制等功能.
2219

23-
Sequelize 遵从 [语义版本控制](http://semver.org)[官方 Node.js LTS 版本](https://nodejs.org/en/about/releases/). Sequelize v7 版本正式支持 Node.js `^12.22.0`, `^14.17,0`, `^16.0.0`. 其他版本或可正常工作.
20+
Sequelize 遵从 [语义版本控制](http://semver.org)[官方 Node.js LTS 版本](https://nodejs.org/en/about/releases/). Sequelize v7 版本正式支持 Node.js `^14.17,0`, `^16.0.0`. 其他版本或可正常工作.
21+
22+
你目前正在查看 Sequelize 的**教程和指南**.你可能还对[API 参考](https://sequelize.org/api/v7/) (英文)感兴趣.
2423

25-
你目前正在查看 Sequelize 的**教程和指南**.你可能还对[API 参考](http://docs.sequelizejs.com/identifiers) (英文)感兴趣.
2624

27-
# 赞赏支持
2825
![赞赏支持](https://raw.githubusercontent.com/demopark/electron-api-demos-Zh_CN/master/assets/img/td.png)
2926

3027

@@ -45,7 +42,9 @@ Sequelize 遵从 [语义版本控制](http://semver.org) 和 [官方 Node.js LTS
4542
- [从 v5 升级到 v6](other-topics/upgrade-to-v6.md)
4643
- [从 v6 升级到 v7](other-topics/upgrade-to-v7.md)
4744

48-
## 文档(v7)
45+
## 文档(v7-alpha)
46+
47+
**注意** 由于当前alpha阶段api调整, 文档中的API参考指向尚未确定. 可前往 [V7 API 参考](https://sequelize.org/api/v7/)自行查询.
4948

5049
### 核心概念
5150

@@ -93,7 +92,7 @@ Sequelize 遵从 [语义版本控制](http://semver.org) 和 [官方 Node.js LTS
9392

9493
```sh
9594
# 使用 npm
96-
npm i sequelize # 这将安装最新版本的 Sequelize
95+
npm install sequelize # 这将安装最新版本的 Sequelize
9796
# 使用 yarn
9897
yarn add sequelize
9998
```
@@ -107,18 +106,50 @@ npm i mariadb # MariaDB
107106
npm i sqlite3 # SQLite
108107
npm i tedious # Microsoft SQL Server
109108
npm i ibm_db # DB2
109+
npm i odbc # IBM i
110+
110111
# 使用 yarn
111112
yarn add pg pg-hstore # PostgreSQL
112113
yarn add mysql2 # MySQL
113114
yarn add mariadb # MariaDB
114115
yarn add sqlite3 # SQLite
115116
yarn add tedious # Microsoft SQL Server
116117
yarn add ibm_db # DB2
118+
yarn add odbc # IBM i
117119
```
118120

119121
## 简单示例
120122

121-
```js
123+
#### TypeScript
124+
125+
```javascript
126+
import { Sequelize, Model, DataTypes, InferAttributes, InferCreationAttributes } from 'sequelize';
127+
128+
const sequelize = new Sequelize('sqlite::memory:');
129+
130+
class User extends Model<InferAttributes<User>, InferCreationAttributes<User>> {
131+
declare username: string | null;
132+
declare birthday: Date | null;
133+
}
134+
135+
User.init({
136+
username: DataTypes.STRING,
137+
birthday: DataTypes.DATE
138+
}, { sequelize, modelName: 'user' });
139+
140+
(async () => {
141+
await sequelize.sync();
142+
const jane = await User.create({
143+
username: 'janedoe',
144+
birthday: new Date(1980, 6, 20),
145+
});
146+
console.log(jane.toJSON());
147+
})();
148+
```
149+
150+
#### JavaScript (CJS)
151+
152+
```javascript
122153
const { Sequelize, Model, DataTypes } = require('sequelize');
123154
const sequelize = new Sequelize('sqlite::memory:');
124155

advanced-association-concepts/advanced-many-to-many.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,7 +481,7 @@ someUser.getProfiles({ joinTableAttributes: ['selfGranted'] });
481481
```js
482482
const Player = sequelize.define('Player', { username: DataTypes.STRING });
483483
const Team = sequelize.define('Team', { name: DataTypes.STRING });
484-
const Game = sequelize.define('Game', { name: DataTypes.INTEGER });
484+
const Game = sequelize.define('Game', { name: DataTypes.STRING });
485485
```
486486

487487
现在的问题是:如何关联它们?
@@ -537,13 +537,13 @@ GameTeam.hasMany(PlayerGameTeam);
537537
上面的关联正是我们想要的. 这是一个完整的可运行示例:
538538

539539
```js
540-
const { Sequelize, Op, Model, DataTypes } = require('sequelize');
540+
const { Sequelize, Op, Model, DataTypes } = require('@sequelize/core');
541541
const sequelize = new Sequelize('sqlite::memory:', {
542542
define: { timestamps: false } // 在这个例子中只是为了减少混乱
543543
});
544544
const Player = sequelize.define('Player', { username: DataTypes.STRING });
545545
const Team = sequelize.define('Team', { name: DataTypes.STRING });
546-
const Game = sequelize.define('Game', { name: DataTypes.INTEGER });
546+
const Game = sequelize.define('Game', { name: DataTypes.STRING });
547547

548548
// 我们在 Game 和 Team 游戏和团队之间应用超级多对多关系
549549
const GameTeam = sequelize.define('GameTeam', {

advanced-association-concepts/creating-with-associations.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,23 @@
99
考虑以下模型:
1010

1111
```js
12-
class Product extends Model {}
13-
Product.init({
14-
title: Sequelize.STRING
15-
}, { sequelize, modelName: 'product' });
16-
class User extends Model {}
17-
User.init({
18-
firstName: Sequelize.STRING,
19-
lastName: Sequelize.STRING
20-
}, { sequelize, modelName: 'user' });
21-
class Address extends Model {}
22-
Address.init({
23-
type: DataTypes.STRING,
24-
line1: Sequelize.STRING,
25-
line2: Sequelize.STRING,
26-
city: Sequelize.STRING,
27-
state: Sequelize.STRING,
28-
zip: Sequelize.STRING,
12+
class Product extends Model {}
13+
Product.init({
14+
title: DataTypes.STRING
15+
}, { sequelize, modelName: 'product' });
16+
class User extends Model {}
17+
User.init({
18+
firstName: DataTypes.STRING,
19+
lastName: DataTypes.STRING
20+
}, { sequelize, modelName: 'user' });
21+
class Address extends Model {}
22+
Address.init({
23+
type: DataTypes.STRING,
24+
line1: DataTypes.STRING,
25+
line2: DataTypes.STRING,
26+
city: DataTypes.STRING,
27+
state: DataTypes.STRING,
28+
zip: DataTypes.STRING,
2929
}, { sequelize, modelName: 'address' });
3030

3131
// 我们保存关联设置调用的返回值,以便以后使用
@@ -87,7 +87,7 @@ return Product.create({
8787
```js
8888
class Tag extends Model {}
8989
Tag.init({
90-
name: Sequelize.STRING
90+
name: DataTypes.STRING
9191
}, { sequelize, modelName: 'tag' });
9292

9393
Product.hasMany(Tag);

advanced-association-concepts/eager-loading.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ User.findAll({
133133
User.findAll({
134134
include: {
135135
model: Tool,
136-
as: 'Instruments'
136+
as: 'Instruments',
137137
where: {
138138
size: {
139139
[Op.ne]: 'small'

advanced-association-concepts/polymorphic-associations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ Video.hasMany(Comment, {
106106
});
107107
Comment.belongsTo(Video, { foreignKey: 'commentableId', constraints: false });
108108

109-
Comment.addHook("afterFind", findResult => {
109+
Comment.hooks.addListener("afterFind", findResult => {
110110
if (!Array.isArray(findResult)) findResult = [findResult];
111111
for (const instance of findResult) {
112112
if (instance.commentableType === "image" && instance.image !== undefined) {

core-concepts/assocs.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ Bar.belongsTo(Foo, {
159159
例如,要使用 `UUID` 作为外键数据类型而不是默认值(`INTEGER`),只需执行以下操作:
160160

161161
```js
162-
const { DataTypes } = require("Sequelize");
162+
const { DataTypes } = require('@sequelize/core');
163163

164164
Foo.hasOne(Bar, {
165165
foreignKey: {
@@ -309,7 +309,7 @@ CREATE TABLE IF NOT EXISTS "ActorMovies" (
309309

310310
与一对一和一对多关系不同,对于多对多关系,`ON UPDATE``ON DELETE` 的默认值为 `CASCADE`.
311311

312-
当模型中不存在主键时Belongs-to-Many 将创建一个唯一键. 可以使用 **uniqueKey** 参数覆盖此唯一键名. 若不希望产生唯一键, 可以使用 ***unique: false*** 参数.
312+
当模型中不存在主键时, Belongs-to-Many 将创建一个唯一键. 可以使用 **uniqueKey** 参数覆盖此唯一键名. 若不希望产生唯一键, 可以使用 ***unique: false*** 参数.
313313

314314
```js
315315
Project.belongsToMany(User, { through: UserProjects, uniqueKey: 'my_custom_unique' })
@@ -401,9 +401,9 @@ console.log('Amount of Sails:', awesomeCaptain.ship.amountOfSails);
401401
// 这里没有什么特别的东西
402402
```
403403

404-
* 或使用关联模型可用的 *[特殊方法/混合](#special-methods-mixins-to-instances)* ,这将在本文稍后进行解释.
404+
* 或使用关联模型可用的 *[特殊方法/混合]* ,这将在本文稍后进行解释.
405405

406-
**注意:** [`save()`实例方法](https://sequelize.org/master/class/lib/model.js~Model.html#instance-method-save) 并不知道关联关系. 如果你修改了 *父级* 对象预先加载的 *子级* 的值,那么在父级上调用 `save()` 将会忽略子级上发生的修改.
406+
**注意:** [`save()` 实例方法](/api/v7/classes/Model.html#save) 并不知道关联关系. 如果你修改了 *父级* 对象预先加载的 *子级* 的值,那么在父级上调用 `save()` 将会忽略子级上发生的修改.
407407

408408
## 关联别名 & 自定义外键
409409

core-concepts/getters-setters-virtuals.md

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
Sequelize 允许你为模型的属性定义自定义获取器和设置器.
44

5-
Sequelize 还允许你指定所谓的 *虚拟属性*,它们是 Sequelize 模型上的属性,这些属性在基础 SQL 表中实际上并不存在,而是由 Sequelize 自动填充. 它们对于创建自定义属性非常有用, 这也可以简化您的代码.
5+
Sequelize 还允许你指定所谓的 *虚拟属性*,它们是 Sequelize 模型上的属性,这些属性在基础 SQL 表中实际上并不存在,而是由 Sequelize 自动填充. 它们对于创建自定义属性非常有用, 这也可以简化你的代码.
66

77
## 获取器
88

@@ -132,7 +132,7 @@ console.log(post.getDataValue('content'));
132132
如果有一种简单的方法能直接获取 *全名* 那会非常好! 我们可以将 `getters` 的概念与 Sequelize 针对这种情况提供的特殊数据类型结合使用:`DataTypes.VIRTUAL`:
133133

134134
```js
135-
const { DataTypes } = require("sequelize");
135+
const { DataTypes } = require('@sequelize/core');
136136

137137
const User = sequelize.define('user', {
138138
firstName: DataTypes.TEXT,
@@ -155,47 +155,3 @@ const User = sequelize.define('user', {
155155
const user = await User.create({ firstName: 'John', lastName: 'Doe' });
156156
console.log(user.fullName); // 'John Doe'
157157
```
158-
159-
## 在 Sequelize v7 中已弃用:`getterMethods``setterMethods`
160-
161-
Sequelize 在模型定义中还提供了 `getterMethods``setterMethods` 参数,以指定看起来像但与虚拟属性不完全相同的事物. 不鼓励使用此方法,并且将来可能会**不建议**使用(建议直接使用虚拟属性).
162-
163-
示例:
164-
165-
```js
166-
const { Sequelize, DataTypes } = require('sequelize');
167-
const sequelize = new Sequelize('sqlite::memory:');
168-
169-
const User = sequelize.define('user', {
170-
firstName: DataTypes.STRING,
171-
lastName: DataTypes.STRING
172-
}, {
173-
getterMethods: {
174-
fullName() {
175-
return this.firstName + ' ' + this.lastName;
176-
}
177-
},
178-
setterMethods: {
179-
fullName(value) {
180-
// 注意:这仅用于演示.
181-
// 查阅: https://www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/
182-
const names = value.split(' ');
183-
const firstName = names[0];
184-
const lastName = names.slice(1).join(' ');
185-
this.setDataValue('firstName', firstName);
186-
this.setDataValue('lastName', lastName);
187-
}
188-
}
189-
});
190-
191-
(async () => {
192-
await sequelize.sync();
193-
let user = await User.create({ firstName: 'John', lastName: 'Doe' });
194-
console.log(user.fullName); // 'John Doe'
195-
user.fullName = 'Someone Else';
196-
await user.save();
197-
user = await User.findOne();
198-
console.log(user.firstName); // 'Someone'
199-
console.log(user.lastName); // 'Else'
200-
})();
201-
```

0 commit comments

Comments
 (0)