指南 参考 源代码
public class | source

Model

Model 代表数据库中的一个表。该类的实例代表数据库行。

Model 实例使用 dataValues 属性的概念进行操作,该属性存储实例表示的实际值。默认情况下,也可以直接从实例访问 dataValues 中的值,即

instance.field
// is the same as
instance.get('field')
// is the same as
instance.getDataValue('field')

但是,如果为 field 定义了 getter 和/或 setter,则会调用它们,而不是从 dataValues 返回值。对于常规使用,建议直接访问属性或使用 getgetDataValue 仅应在自定义 getter 时使用。

静态方法摘要

静态公共方法
public static

addScope(name: string, scope: object | Function, options: object)

为模型添加一个新的作用域。

public static

async aggregate(attribute: string, aggregateFunction: string, options: object): Promise<DataTypes|object>

在指定字段上运行聚合方法

public static

belongsTo(target: Model, options: object): BelongsTo

在此(源)和提供的目标之间创建一个关联。

public static

belongsToMany(target: Model, options: object): BelongsToMany

使用联接表创建 N:M 关联。

public static

build(values: object | Array, options: object): Model | Array<Model>

构建一个新的模型实例。

public static

async bulkCreate(records: Array, options: object): Promise<Array<Model>>

批量创建和插入多个实例。

public static

async count(options: object): Promise<number>

计算匹配提供的 where 子句的记录数。

public static

async create(values: object, options: object): Promise<Model>

构建一个新的模型实例,并在其上调用 save。

public static

async decrement(fields: string | Array | object, options: object): Promise<Model[], ?number>

减少一个或多个列的值。

从 4.36.0 开始
public static

async describe(schema: string, options: object): Promise

在表上运行描述查询。

public static

async destroy(options: object): Promise<number>

删除多个实例,或者如果启用了 paranoid,则将其 deletedAt 时间戳设置为当前时间。

public static

async drop(options: object): Promise

删除此 Model 表示的表

public static

async findAll(options: object): Promise<Array<Model>>

搜索多个实例。

public static

async findAndCountAll(options: object): Promise<{count: number|number[], rows: Model[]}>

查找与您的查询匹配的所有行,在指定的偏移量/限制范围内,并获取与您的查询匹配的总行数。

public static

async findByPk(param: number | bigint | string | Buffer, options: object): Promise<Model>

通过主键搜索单个实例。

public static

一个更高效的 findOrCreate,它可能无法在事务下工作(在 postgres 中工作)。它将执行 find 调用,如果为空,则尝试创建,如果唯一约束,则尝试再次查找。

public static

async findOne(options: object): Promise<Model|null>

搜索单个实例。

public static

async findOrBuild(options: object): Promise<Model, boolean>

查找与查询匹配的行,或者如果没有找到,则构建(但不保存)该行。promise 的成功结果将是(instance, built)

public static

async findOrCreate(options: object): Promise<Model, boolean>

查找与查询匹配的行,或者如果没有找到,则构建并保存该行。promise 的成功结果将是(instance, created)

public static

返回模型的属性。

public static

获取模型的表名,考虑架构。

public static

hasMany(target: Model, options: object): HasMany

在此(源)和提供的目标之间创建一个 1:m 关联。

public static

hasOne(target: Model, options: object): HasOne

在此(源)和提供的目标之间创建一个关联。

public static

async increment(fields: string | Array | object, options: object): Promise<Model[], ?number>

增加一个或多个列的值。

public static

init(attributes: object, options: object): Model

使用属性和选项初始化模型,该模型表示数据库中的表。

public static

async max(field: string, options: object): Promise<*>

查找字段的最大值

public static

async min(field: string, options: object): Promise<*>

查找字段的最小值

public static

removeAttribute(attribute: string)

从模型定义中删除属性

public static

async restore(options: object): Promise

如果启用了paranoid,则恢复多个实例。

public static

schema(schema: string, options: object): Model

将模式应用于此模型。

public static

scope(option: Array | object | string): Model

define中创建的范围应用于模型。

public static

async sum(field: string, options: object): Promise<number>

查找字段的总和

public static

async sync(options: object): Promise<Model>

将此模型同步到数据库,即创建表。

public static

async truncate(options: object): Promise

截断模型的所有实例。

public static

获取未限定范围的模型

public static

async update(values: object, options: object): Promise<Array<number, number>>

更新与where选项匹配的多个实例。

public static

async upsert(values: object, options: object): Promise<Array<Model, boolean|null>>

插入或更新单行。

构造函数概要

公共构造函数
public

constructor(values: object, options: object)

构建一个新的模型实例。

成员概要

公共成员
public

如果此实例尚未持久保存到数据库,则返回 true

public get

对sequelize实例的引用

方法概要

公共方法
public

changed(key: string, value: any): boolean | Array

如果使用字符串调用changed,它将返回一个布尔值,指示dataValues中该键的值是否与_previousDataValues中的值不同。

public

async decrement(fields: string | Array | object, options: object): Promise

减少一个或多个列的值。

public

async destroy(options: object): Promise

销毁与该实例对应的行。

public

equals(other: Model): boolean

检查该实例和other实例是否引用同一行

public

通过调用equals检查该实例是否等于others中的一个。

public

get(key: string, options: object): object | any

如果没有提供键,则返回实例的所有值,还会调用虚拟getter。

public

getDataValue(key: string): any

获取基础数据值的value

public

async increment(fields: string | Array | object, options: object): Promise<Model>

增加一个或多个列的值。

自 4.0.0 起
public

辅助方法,用于确定实例是否被“软删除”。

public

previous(key: string): any | Array<any>

_previousDataValues返回键的先前值。

public

async reload(options: object): Promise<Model>

就地刷新当前实例,即

public

async restore(options: object): Promise

恢复与该实例对应的行。

public

异步 save(options: 对象): Promise<Model>

验证该实例,如果验证通过,则将其持久化到数据库。

public

set(key: 字符串 | 对象, value: 任何, options: 对象): Model

Set 用于更新实例上的值(即 Sequelize 实例的表示,请记住在实际调用 save 之前不会持久化任何内容)。

public

setDataValue(key: 字符串, value: 任何)

更新底层数据值

public

将实例转换为 JSON 表示形式。

public

异步 update(values: 对象, options: 对象): Promise<Model>

这与调用 set 然后调用 save 相同,但它只保存传递给它的精确值,使其更原子化更安全。

public

异步 validate(options: 对象): Promise

根据模型定义中设置的验证规则验证该实例的属性。

public

where(checkVersion: 布尔值): 对象

获取表示该实例查询的对象,与 options.where 一起使用

静态公共方法

公有 静态 addScope(name: 字符串, scope: 对象 | 函数, options: 对象) 源代码

向模型添加新的作用域。这在添加包含作用域时特别有用,此时您要包含的模型在定义该模型时不可用。

默认情况下,如果已经存在具有该名称的作用域,这将抛出错误。在 options 对象中传递 override: true 以静默此错误。

参数

名称类型属性描述
name 字符串

作用域的名称。使用 defaultScope 覆盖默认作用域

scope 对象 | 函数

作用域或选项

options 对象
  • 可选

作用域选项

options.override 布尔值
  • 可选
  • 默认值:false

如果已定义,则覆盖旧作用域

公有 静态 异步 aggregate(attribute: 字符串, aggregateFunction: 字符串, options: 对象): Promise<DataTypes|对象> 源代码

在指定字段上运行聚合方法

参数

名称类型属性描述
attribute 字符串

要聚合的属性。可以是字段名称或 *

aggregateFunction 字符串

用于聚合的函数,例如 sum、max 等。

options 对象
  • 可选

查询选项。有关完整选项,请参阅 sequelize.query

options.where 对象
  • 可选

搜索属性的哈希表。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.dataType DataTypes | 字符串
  • 可选

结果的类型。如果 field 是该模型中的一个字段,则默认值为该字段的类型,否则默认为浮点数。

options.distinct 布尔值
  • 可选

将 DISTINCT 应用于正在聚合的字段

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.plain 布尔值
  • 可选

当为 true 时,返回的第一个 aggregateFunction 值将转换为 dataType 并返回。如果指定了其他属性,以及 group 子句,请将 plain 设置为 false 以返回所有返回行的所有值。默认为 true

返回

Promise<DataTypes|对象>

返回转换为 options.dataType 的聚合结果,除非 options.plain 为 false,在这种情况下,将返回完整的数据结果。

公有 静态 belongsTo(target: Model, options: 对象): BelongsTo 源代码

在该模型(源模型)和提供的目标模型之间创建关联。外键将添加到源模型上。

参数

名称类型属性描述
target Model

目标模型

options 对象
  • 可选

belongsTo 关联选项

options.hooks 布尔值
  • 可选
  • 默认值:false

设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 User.hasOne(Profile, {onDelete: 'cascade', hooks:true}),则在删除用户时将调用 profile 的 before-/afterDestroy 钩子。否则,将删除 profile 而不调用任何钩子

options.as 字符串
  • 可选

该模型的别名,以单数形式。另请参阅传递给 sequelize.definename 选项。如果您在相同表之间创建多个关联,则应提供别名以区分它们。如果您在创建关联时提供了别名,则在急切加载和获取关联模型时应提供相同的别名。默认为 target 的单数形式

options.foreignKey 字符串 | 对象
  • 可选

源表中外键属性的名称,或表示外键列类型定义的对象(有关语法,请参阅 Sequelize.define)。使用对象时,您可以添加 name 属性以设置列的名称。默认为 target + target 主键的名称

options.targetKey 字符串
  • 可选

要作为目标表中关联键使用的属性的名称。默认为目标表的primaryKey

options.onDelete 字符串
  • 可选
  • 默认值:'SET NULL|NO ACTION'

如果 foreignKey 允许为空,则为 SET NULL,否则为 NO ACTION

options.onUpdate 字符串
  • 可选
  • 默认值:'CASCADE'

设置 'ON UPDATE'

options.constraints 布尔值
  • 可选
  • 默认值:true

是否应在外键上启用 on update 和 on delete 约束。

返回

BelongsTo

示例

Profile.belongsTo(User) // This will add userId to the profile table

公有 静态 belongsToMany(target: Model, options: 对象): BelongsToMany 源代码

使用联接表创建 N:M 关联。定义 through 是必需的。

参数

名称类型属性描述
target Model

目标模型

options 对象

belongsToMany 关联选项

options.hooks 布尔值
  • 可选
  • 默认值:false

设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 User.hasOne(Profile, {onDelete: 'cascade', hooks:true}),则在删除用户时将调用 profile 的 before-/afterDestroy 钩子。否则,将删除 profile 而不调用任何钩子

options.through Model | 字符串 | 对象

在 n:m 关联中用于联接源和目标的表的名称。如果要自己定义联接表并向其中添加其他属性,也可以是 Sequelize 模型。

options.through.model Model
  • 可选

用于联接 N:M 关联两边的模型。

options.through.scope 对象
  • 可选

将在 through 模型上用于关联创建和查找默认值的键值集。(请记住将属性添加到 through 模型)

options.through.unique 布尔值
  • 可选
  • 默认值:true

如果为 true,将从使用的外键生成唯一键(使用作用域时可能想要关闭此选项并创建特定唯一键)

options.through.paranoid 布尔值
  • 可选
  • 默认值:false

如果为 true,则生成的联接表将是 paranoid

options.as 字符串 | 对象
  • 可选

该关联的别名。如果您提供字符串,则它应该是复数形式,并且将使用 node.inflection 转换为单数形式。如果您要自己控制单数形式,请提供具有 pluralsingular 键的对象。另请参阅传递给 sequelize.definename 选项。如果您在相同表之间创建多个关联,则应提供别名以区分它们。如果您在创建关联时提供了别名,则在急切加载和获取关联模型时应提供相同的别名。默认为 target 的复数形式

options.foreignKey 字符串 | 对象
  • 可选

联接表中外键的名称(代表源模型),或者一个对象,该对象表示外键列的类型定义(请参阅 Sequelize.define 获取语法)。当使用对象时,您可以添加一个 name 属性来设置列的名称。默认值为源名称 + 源主键。

options.otherKey 字符串 | 对象
  • 可选

联接表中外键的名称(代表目标模型),或者一个对象,该对象表示其他列的类型定义(请参阅 Sequelize.define 获取语法)。当使用对象时,您可以添加一个 name 属性来设置列的名称。默认值为目标名称 + 目标主键。

options.scope 对象
  • 可选

一个键值对,用于关联目标的创建和查找默认值。(sqlite 不支持 N:M)

options.timestamps 布尔值
  • 可选
  • default: sequelize.options.timestamps

联接模型是否应该有时间戳

options.onDelete 字符串
  • 可选
  • default: 'SET NULL|CASCADE'

如果这是 n:m,则级联;如果是 1:m,则设置为空

options.onUpdate 字符串
  • 可选
  • 默认值:'CASCADE'

设置 ON UPDATE

options.constraints 布尔值
  • 可选
  • 默认值:true

是否应在外键上启用 on update 和 on delete 约束。

返回

BelongsToMany

示例

// Automagically generated join model
User.belongsToMany(Project, { through: 'UserProjects' })
Project.belongsToMany(User, { through: 'UserProjects' })

// Join model with additional attributes
const UserProjects = sequelize.define('UserProjects', {
  started: Sequelize.BOOLEAN
})
User.belongsToMany(Project, { through: UserProjects })
Project.belongsToMany(User, { through: UserProjects })

public static build(values: object | Array, options: object): Model | Array<Model> source

构建一个新的模型实例。

参数

名称类型属性描述
values object | Array

键值对对象或此类对象的数组。如果是数组,该函数将返回一个实例数组。

options 对象
  • 可选

实例构建选项

options.raw 布尔值
  • 可选
  • 默认值:false

如果设置为 true,值将忽略字段和虚拟设置器。

options.isNewRecord 布尔值
  • 可选
  • 默认值:true

这是否是新记录

options.include Array
  • 可选

包含选项数组 - 用于构建预取/包含的模型实例。请参阅 set

返回

Model | Array<Model>

public static async bulkCreate(records: Array, options: object): Promise<Array<Model>> source

批量创建和插入多个实例。

成功处理程序传递一个实例数组,但请注意,这些实例可能无法完全代表数据库中行的状态。这是因为 MySQL 和 SQLite 不易于以可以映射到多个记录的方式获取回自动生成的 ID 和其他默认值。要获取新创建值的实例,您需要再次查询它们。

如果验证失败,则 Promise 会被一个类似数组的 AggregateError 拒绝。

参数

名称类型属性描述
records Array

要从中创建实例的对象(键值对)列表

options 对象
  • 可选

批量创建选项

options.fields Array
  • 可选

要插入的字段(默认为所有字段)

options.validate 布尔值
  • 可选
  • 默认值:false

每行在插入之前是否应该进行验证。如果一行验证失败,则整个插入将失败。

options.hooks 布尔值
  • 可选
  • 默认值:true

在批量创建钩子之前/之后运行?

options.individualHooks 布尔值
  • 可选
  • 默认值:false

对每个单独的实例运行创建钩子之前/之后?如果 options.hooks 为 true,则仍将运行 BulkCreate 钩子。

options.ignoreDuplicates 布尔值
  • 可选
  • 默认值:false

忽略主键的重复值?(MSSQL 或 Postgres < 9.5 不支持)

options.updateOnDuplicate Array
  • 可选

如果行键已存在(重复键更新),则要更新的字段?(仅 MySQL、MariaDB、SQLite >= 3.24.0 和 Postgres >= 9.5 支持)。

options.conflictAttributes Array
  • 可选

ON CONFLICT 部分查询中冲突字段的可选覆盖。仅 Postgres >= 9.5 和 SQLite >= 3.24.0 支持。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.returning boolean | Array
  • 可选
  • 默认值:false

如果为 true,则追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres)

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise<Array<Model>>

public static async count(options: object): Promise<number> source

计算匹配提供的 where 子句的记录数。

如果您提供 include 选项,则将计算匹配关联的数量。

参数

名称类型属性描述
options 对象
  • 可选

options

options.where 对象
  • 可选

搜索属性的哈希表。

options.include 对象
  • 可选

包含选项。有关详细信息,请参阅 find

options.paranoid 布尔值
  • 可选
  • 默认值:true

设置为 true 以仅计算未删除的记录。可以在启用 paranoid 的模型上使用

options.distinct 布尔值
  • 可选

对主键或 options.col 应用 COUNT(DISTINCT(col))。

options.col 字符串
  • 可选

应应用 COUNT() 的列

options.attributes Array
  • 可选

group 结合使用

options.group Array
  • 可选

用于创建复杂的计数。将根据需要返回多行。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise<number>

public static async create(values: object, options: object): Promise<Model> source

构建一个新的模型实例,并在其上调用 save。

参数

名称类型属性描述
values 对象

要使用其创建新记录的数据值哈希

options 对象
  • 可选

构建和查询选项

options.raw 布尔值
  • 可选
  • 默认值:false

如果设置为 true,值将忽略字段和虚拟设置器。

options.isNewRecord 布尔值
  • 可选
  • 默认值:true

这是否是新记录

options.include Array
  • 可选

包含选项数组 - 用于构建预取/包含的模型实例。请参阅 set

options.fields string[]
  • 可选

一个可选的字符串数组,表示数据库列。如果提供 fields,则只验证和保存这些列。

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

options.validate 布尔值
  • 可选
  • 默认值:true

如果为 false,则不会运行验证。

options.hooks 布尔值
  • 可选
  • 默认值:true

运行创建/更新+验证钩子之前和之后

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.returning boolean | Array
  • 可选
  • 默认值:true

追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres)

返回

Promise<Model>

public static async decrement(fields: string | Array | object, options: object): Promise<Model[], ?number> since 4.36.0 source

减少一个或多个列的值。这在数据库中完成,这意味着它不使用当前存储在实例上的值。减少使用 sql SET column = column - X WHERE foo = 'bar' 查询完成。要获得减少到实例后的正确值,您应该进行重新加载。

参数

名称类型属性描述
fields string | Array | object

如果提供字符串,则该列将按 options 中给出的 by 值递减。如果提供数组,则每个列都是如此。如果提供对象,则每个列都按给定值递减。

options 对象

减少选项,类似于增加

返回

Promise<Model[], ?number>

返回受影响的行数组和受影响的计数,options.returning 为 true 时,只要方言支持。

示例

将数字减少 1
Model.decrement('number', { where: { foo: 'bar' });
将数字和计数减少 2
Model.decrement(['number', 'count'], { by: 2, where: { foo: 'bar' } });
将 answer 减少 42,并将 tries 减少 -1
// `by` is ignored, since each column has its own value
Model.decrement({ answer: 42, tries: -1}, { by: 2, where: { foo: 'bar' } });

public static async describe(schema: string, options: object): Promise source

在表上运行描述查询。

参数

名称类型属性描述
schema 字符串
  • 可选

要搜索表的模式名称

options 对象
  • 可选

查询选项

返回

Promise

属性及其类型的哈希表

public static async destroy(options: object): Promise<number> source

删除多个实例,或者如果启用了 paranoid,则将其 deletedAt 时间戳设置为当前时间。

参数

名称类型属性描述
options 对象

销毁选项

options.where 对象
  • 可选

过滤销毁

options.hooks 布尔值
  • 可选
  • 默认值:true

在批量销毁钩子之前/之后运行?

options.individualHooks 布尔值
  • 可选
  • 默认值:false

如果设置为 true,销毁将 SELECT 所有与 where 参数匹配的记录,并将对每行执行销毁钩子之前/之后。

options.limit number
  • 可选

要删除的行数

options.force 布尔值
  • 可选
  • 默认值:false

删除而不是将 deletedAt 设置为当前时间戳(仅当启用 paranoid 时适用)

options.truncate 布尔值
  • 可选
  • 默认值:false

如果设置为 true,支持它的方言将使用 TRUNCATE 而不是 DELETE FROM。如果截断表,则忽略 where 和 limit 选项。

options.cascade 布尔值
  • 可选
  • 默认值:false

仅与 TRUNCATE 结合使用。截断所有对命名表或由于 CASCADE 添加到该组的任何表具有外键引用的表。

options.restartIdentity 布尔值
  • 可选
  • 默认值:false

仅与 TRUNCATE 结合使用。自动重启被截断表中的列拥有的序列。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

返回

Promise<number>

销毁的行数

public static async drop(options: object): Promise source

删除此 Model 表示的表

参数

名称类型属性描述
options 对象
  • 可选

删除选项

options.cascade 布尔值
  • 可选
  • 默认值:false

同时删除所有依赖此表的对象,例如视图。仅在 postgres 中有效

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

返回

Promise

public static async findAll(options: object): Promise<Array<Model>> source

搜索多个实例。

参数

名称类型属性描述
options 对象
  • 可选

描述搜索范围的选项哈希表

options.where 对象
  • 可选

描述搜索的属性哈希表。请参阅上面的示例。

options.attributes Array<string> | object
  • 可选

您要选择的属性列表,或包含includeexclude 键的对象。要重命名属性,可以传递一个数组,其中包含两个元素 - 第一个是在数据库中的属性名称(或某种表达式,例如Sequelize.literalSequelize.fn 等),第二个是您希望属性在返回的实例中具有的名称

options.attributes.include Array<string>
  • 可选

选择模型的所有属性,以及一些额外的属性。对于聚合很有用,例如 { attributes: { include: [[sequelize.fn('COUNT', sequelize.col('id')), 'total']] }

options.attributes.exclude Array<string>
  • 可选

选择模型的所有属性,除了少数几个属性。对于安全目的很有用,例如 { attributes: { exclude: ['password'] } }

options.paranoid 布尔值
  • 可选
  • 默认值:true

如果为 true,则仅返回未删除的记录。如果为 false,则返回已删除和未删除的记录。仅适用于模型的 options.paranoid 为 true 时。

options.include Array<object|Model|string>
  • 可选

使用左连接热加载关联的列表。支持 { include: [ Model1, Model2, ...]}{ include: [{ model: Model1, as: 'Alias' }]}{ include: ['Alias']}。如果您的关联设置了 as(例如 X.hasMany(Y, { as: 'Z' },则在热加载 Y 时,您需要在 as 属性中指定 Z)。

options.include[].model Model
  • 可选

您要热加载的模型

options.include[].as 字符串
  • 可选

关系的别名,如果您要热加载的模型是别名的。对于 hasOne / belongsTo,这应该是单数名称,对于 hasMany,它应该是复数

options.include[].association 关联
  • 可选

您要热加载的关联。(这可以用来代替提供模型/别名对)

options.include[].where 对象
  • 可选

应用于子模型的 where 子句。请注意,这会将热加载转换为内连接,除非您明确设置 required: false

options.include[].or 布尔值
  • 可选
  • 默认值:false

是否使用 OR 而不是 AND 将 ON 和 WHERE 子句绑定在一起。

options.include[].on 对象
  • 可选

为连接提供您自己的 ON 条件。

options.include[].attributes Array<string>
  • 可选

从子模型中选择的属性列表

options.include[].required 布尔值
  • 可选

如果为 true,则转换为内连接,这意味着只有在父模型具有任何匹配的子模型时才会加载父模型。如果设置了 include.where,则为 true,否则为 false。

options.include[].right 布尔值
  • 可选

如果为 true,则转换为右连接(如果方言支持)。如果 include.required 为 true,则忽略。

options.include[].separate 布尔值
  • 可选

如果为 true,则运行一个单独的查询来获取关联的实例,仅适用于 hasMany 关联

options.include[].limit number
  • 可选

限制连接的行,仅适用于 include.separate=true

options.include[].through.as 字符串
  • 可选

连接模型的别名,如果您想为它指定与默认名称不同的名称。

options.include[].through.paranoid 布尔值
  • 可选

如果为 true,则仅返回连接表中的未删除记录。如果为 false,则返回已删除和未删除的记录。仅适用于通过模型是 paranoid 时。

options.include[].through.where 对象
  • 可选

为 belongsToMany 关系过滤连接模型

options.include[].through.attributes Array
  • 可选

为 belongsToMany 关系从连接模型中选择的属性列表

options.include[].include Array<object|Model|string>
  • 可选

加载更深层的嵌套相关模型

options.include[].duplicating 布尔值
  • 可选

将包含标记为重复,将防止使用子查询。

options.order Array | fn | col | literal
  • 可选

指定排序。使用数组,您可以提供多个要排序的列/函数。每个元素可以进一步包装在一个包含两个元素的数组中。第一个元素是要排序的列/函数,第二个是方向。例如:order: [['name', 'DESC']]。通过这种方式,列将被转义,但方向不会。

options.limit number
  • 可选

结果的限制

options.offset number
  • 可选

结果的偏移量

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.lock 字符串 | 对象
  • 可选

锁定选定的行。可能的选项是 transaction.LOCK.UPDATE 和 transaction.LOCK.SHARE。Postgres 还支持 transaction.LOCK.KEY_SHARE、transaction.LOCK.NO_KEY_UPDATE 以及带有连接的特定模型锁。

options.skipLocked 布尔值
  • 可选

跳过已锁定的行。仅在 Postgres 中支持。

options.raw 布尔值
  • 可选

返回原始结果。有关更多信息,请参阅 sequelize.query。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.having 对象
  • 可选

Having 选项

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.rejectOnEmpty boolean | Error
  • 可选
  • 默认值:false

当没有找到记录时抛出错误

options.dotNotation 布尔值
  • 可选

允许包含具有相同属性/列名称的表 - 这些表在其中包含一个点。

options.nest 布尔值
  • 可选
  • 默认值:false

如果为 true,则将具有“.”分隔的属性名称的对象转换为嵌套对象。

返回

Promise<Array<Model>>

示例

使用 AND 和 = 的简单搜索
Model.findAll({
  where: {
    attr1: 42,
    attr2: 'cake'
  }
})

# WHERE attr1 = 42 AND attr2 = 'cake'
使用大于、小于等
const {gt, lte, ne, in: opIn} = Sequelize.Op;

Model.findAll({
  where: {
    attr1: {
      [gt]: 50
    },
    attr2: {
      [lte]: 45
    },
    attr3: {
      [opIn]: [1,2,3]
    },
    attr4: {
      [ne]: 5
    }
  }
})

# WHERE attr1 > 50 AND attr2 <= 45 AND attr3 IN (1,2,3) AND attr4 != 5
使用 OR 的查询
const {or, and, gt, lt} = Sequelize.Op;

Model.findAll({
  where: {
    name: 'a project',
    [or]: [
      {id: [1, 2, 3]},
      {
        [and]: [
          {id: {[gt]: 10}},
          {id: {[lt]: 100}}
        ]
      }
    ]
  }
});

# WHERE `Model`.`name` = 'a project' AND (`Model`.`id` IN (1, 2, 3) OR (`Model`.`id` > 10 AND `Model`.`id` < 100));

  • 运算符 用于可能的运算符 __别名__:_all_ 如果查询成功,则 promise 将解析为 Model 实例数组。_
  • Sequelize#query

public static async findAndCountAll(options: object): Promise<{count: number|number[], rows: Model[]}> source

查找与您的查询匹配的所有行,并在指定的偏移量/限制内,并获取与您的查询匹配的行的总数。这对于分页非常有用

参数

名称类型属性描述
options 对象
  • 可选

参阅 findAll 选项

返回

Promise<{count: number|number[], rows: Model[]}>

示例

const result = await Model.findAndCountAll({
  where: ...,
  limit: 12,
  offset: 12
});

# In the above example, `result.rows` will contain rows 13 through 24, while `result.count` will return the total number of rows that matched your query.

# When you add includes, only those which are required (either because they have a where clause, or because `required` is explicitly set to true on the include) will be added to the count part.

# Suppose you want to find all users who have a profile attached:

User.findAndCountAll({
  include: [
     { model: Profile, required: true}
  ],
  limit: 3
});

# Because the include for `Profile` has `required` set it will result in an inner join, and only the users who have a profile will be counted. If we remove `required` from the include, both users with and without profiles will be counted

public static async findByPk(param: number | bigint | string | Buffer, options: object): Promise<Model> source

通过主键搜索单个实例。

参数

名称类型属性描述
param number | bigint | string | Buffer

所需实例的主键值。

options 对象
  • 可选

查找选项

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise<Model>

  • Model.findAll 用于选项的完整解释,请注意不支持 options.where。

public static async findCreateFind(options: object): Promise<Model, boolean> source

一个更高效的 findOrCreate,它可能无法在事务下工作(在 postgres 中工作)。它将执行 find 调用,如果为空,则尝试创建,如果唯一约束,则尝试再次查找。

参数

名称类型属性描述
options 对象

查找选项

options.where 对象

搜索属性的哈希表。如果 where 是一个普通对象,它将附加默认值以构建一个新实例。

options.defaults 对象
  • 可选

创建新实例时要使用的默认值

返回

Promise<Model, boolean>

public static async findOne(options: object): Promise<Model|null> source

搜索单个实例。返回找到的第一个实例,如果找不到任何实例,则返回 null。

参数

名称类型属性描述
options 对象
  • 可选

描述搜索范围的选项哈希表

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise<Model|null>

public static async findOrBuild(options: object): Promise<Model, boolean> source

查找与查询匹配的行,或者如果没有找到,则构建(但不保存)该行。promise 的成功结果将是(instance, built)

参数

名称类型属性描述
options 对象

查找选项

options.where 对象

搜索属性的哈希表。如果 where 是一个普通对象,它将附加默认值以构建一个新实例。

options.defaults 对象
  • 可选

构建新实例时要使用的默认值

options.transaction 对象
  • 可选

要在其下运行查询的事务

返回

Promise<Model, boolean>

public static async findOrCreate(options: object): Promise<Model, boolean> source

查找与查询匹配的行,或者如果没有找到,则构建并保存该行。promise 的成功结果将是(instance, created)

如果在options对象中没有传递事务,则会在内部创建一个新事务,以防止在查找后但插入调用之前,另一个连接创建匹配行的竞争条件。但是,在 SQLite 中并不总是可以处理这种情况,特别是当一个事务插入而另一个事务试图在第一个事务提交之前进行选择时。在这种情况下,将抛出sequelize.TimeoutError实例。如果创建了事务,则会创建一个保存点,并且任何唯一约束冲突都会在内部处理。

参数

名称类型属性描述
options 对象

查找和创建选项

options.where 对象

where 搜索属性的哈希值。如果where是一个普通对象,它将与默认值追加以构建一个新实例。

options.defaults 对象
  • 可选

创建新实例时要使用的默认值

options.transaction 事务
  • 可选

要在其下运行查询的事务

返回

Promise<Model, boolean>

public static getAttributes(): object | any source

返回模型的属性。

返回

object | any

public static getTableName(): string | object source

获取模型的表名,考虑模式。如果模型没有模式,该方法将返回名称作为字符串,否则将返回一个包含tableNameschemadelimiter属性的对象。

返回

字符串 | 对象

public static hasMany(target: Model, options: object): HasMany source

在当前模型(源)和提供的目标模型之间创建一个 1:m 关联。外键添加到目标模型。

参数

名称类型属性描述
target Model

目标模型

options 对象
  • 可选

hasMany 关联选项

options.hooks 布尔值
  • 可选
  • 默认值:false

设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 User.hasOne(Profile, {onDelete: 'cascade', hooks:true}),则在删除用户时将调用 profile 的 before-/afterDestroy 钩子。否则,将删除 profile 而不调用任何钩子

options.as 字符串 | 对象
  • 可选

当前模型的别名。如果您提供一个字符串,它应该是复数形式,并将使用 node.inflection 转换为单数形式。如果您想自己控制单数形式,请提供一个包含pluralsingular键的对象。另请参见传递给sequelize.definename选项。如果您在相同的表之间创建多个关联,您应该提供一个别名来区分它们。如果您在创建关联时提供别名,您应该在急切加载时以及获取关联模型时提供相同的别名。默认值为目标的复数形式

options.foreignKey 字符串 | 对象
  • 可选

目标表中外键的名称,或表示外键列类型定义的对象(有关语法,请参阅Sequelize.define)。在使用对象时,您可以添加一个name属性来设置列的名称。默认值为源名称 + 源的主键

options.sourceKey 字符串
  • 可选

源表中用作关联键的字段的名称。默认值为源表的主键

options.scope 对象
  • 可选

一个键值对,用于关联目标的创建和查找默认值。(sqlite 不支持 N:M)

options.onDelete 字符串
  • 可选
  • default: 'SET NULL|CASCADE'

如果外键允许为空值,则为 SET NULL,否则为 CASCADE

options.onUpdate 字符串
  • 可选
  • 默认值:'CASCADE'

设置ON UPDATE

options.constraints 布尔值
  • 可选
  • 默认值:true

是否应在外键上启用 on update 和 on delete 约束。

返回

HasMany

示例

User.hasMany(Profile) // This will add userId to the profile table

public static hasOne(target: Model, options: object): HasOne source

在当前模型(源)和提供的目标模型之间创建一个关联。外键添加到目标模型。

参数

名称类型属性描述
target Model

目标模型

options 对象
  • 可选

hasOne 关联选项

options.hooks 布尔值
  • 可选
  • 默认值:false

设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 User.hasOne(Profile, {onDelete: 'cascade', hooks:true}),则在删除用户时将调用 profile 的 before-/afterDestroy 钩子。否则,将删除 profile 而不调用任何钩子

options.as 字符串
  • 可选

该模型的别名,以单数形式。另请参阅传递给 sequelize.definename 选项。如果您在相同表之间创建多个关联,则应提供别名以区分它们。如果您在创建关联时提供了别名,则在急切加载和获取关联模型时应提供相同的别名。默认为 target 的单数形式

options.foreignKey 字符串 | 对象
  • 可选

目标模型中外键属性的名称,或表示外键列类型定义的对象(有关语法,请参阅Sequelize.define)。在使用对象时,您可以添加一个name属性来设置列的名称。默认值为源名称 + 源的主键

options.sourceKey 字符串
  • 可选

用作源表中关联键的属性的名称。默认值为源表的主键

options.onDelete 字符串
  • 可选
  • default: 'SET NULL|CASCADE'

如果外键允许为空值,则为 SET NULL,否则为 CASCADE

options.onUpdate 字符串
  • 可选
  • 默认值:'CASCADE'

设置 'ON UPDATE'

options.constraints 布尔值
  • 可选
  • 默认值:true

是否应在外键上启用 on update 和 on delete 约束。

options.uniqueKey 字符串
  • 可选

唯一约束的自定义名称。

返回

HasOne

示例

User.hasOne(Profile) // This will add userId to the profile table

public static async increment(fields: string | Array | object, options: object): Promise<Model[], ?number> source

增加一个或多个列的值。这是在数据库中完成的,这意味着它不使用当前存储在实例上的值。增加是使用SET column = column + X WHERE foo = 'bar'查询完成的。为了在增加到实例后获得正确的值,您应该进行重新加载。

参数

名称类型属性描述
fields string | Array | object

如果提供字符串,则该列将按 options 中给出的 by 值递减。如果提供数组,则每个列都是如此。如果提供对象,则每个列都按给定值递减。

options 对象

increment 选项

options.where 对象

条件哈希

options.by number
  • 可选
  • default: 1

增加的数字

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise<Model[], ?number>

返回受影响的行数组和受影响的计数,options.returning 为 true 时,只要方言支持。

示例

将数字增加 1
Model.increment('number', { where: { foo: 'bar' });
将数字和计数增加 2
Model.increment(['number', 'count'], { by: 2, where: { foo: 'bar' } });
将 answer 增加 42,并将 tries 减少 1
// `by` is ignored, as each column has its own value
Model.increment({ answer: 42, tries: -1}, { by: 2, where: { foo: 'bar' } });

public static init(attributes: object, options: object): Model source

使用属性和选项初始化模型,该模型表示数据库中的表。

表列由作为第一个参数给出的哈希值定义。哈希的每个属性都表示一个列。

参数

名称类型属性描述
attributes 对象

一个对象,其中每个属性都是表的列。每个列可以是 DataType、字符串或类型描述对象,其属性在下面描述

attributes.column string | DataTypes | object

数据库列的描述

attributes.column.type string | DataTypes

字符串或数据类型

attributes.column.allowNull 布尔值
  • 可选
  • 默认值:true

如果为 false,则列将具有 NOT NULL 约束,并且在保存实例之前将运行非空验证。

attributes.column.defaultValue any
  • 可选
  • default: null

文字默认值、JavaScript 函数或 SQL 函数(请参阅sequelize.fn

attributes.column.unique string | boolean
  • 可选
  • 默认值:false

如果为 true,则列将获得一个唯一约束。如果提供了一个字符串,则列将成为复合唯一索引的一部分。如果多个列具有相同的字符串,则它们将成为同一唯一索引的一部分

attributes.column.primaryKey 布尔值
  • 可选
  • 默认值:false

如果为 true,则此属性将被标记为主键

attributes.column.field 字符串
  • 可选
  • default: null

如果设置,sequelize 将属性名称映射到数据库中的不同名称

attributes.column.autoIncrement 布尔值
  • 可选
  • 默认值:false

如果为 true,则此列将设置为自动递增

attributes.column.autoIncrementIdentity 布尔值
  • 可选
  • 默认值:false

如果为 true,与 autoIncrement=true 结合使用,将使用 Postgres GENERATED BY DEFAULT AS IDENTITY 而不是 SERIAL。仅限 Postgres 10+

attributes.column.comment 字符串
  • 可选
  • default: null

此列的注释

attributes.column.references string | Model
  • 可选
  • default: null

包含引用配置的对象

attributes.column.references.model string | Model
  • 可选

如果此列引用另一个表,请在此处提供它作为模型或字符串

attributes.column.references.key 字符串
  • 可选
  • default: 'id'

此列引用的外表的列

attributes.column.onUpdate 字符串
  • 可选

当引用的键更新时应该发生什么。CASCADE、RESTRICT、SET DEFAULT、SET NULL 或 NO ACTION 之一

attributes.column.onDelete 字符串
  • 可选

当引用的键删除时应该发生什么。CASCADE、RESTRICT、SET DEFAULT、SET NULL 或 NO ACTION 之一

attributes.column.get 函数
  • 可选

为该列提供自定义获取器。使用this.getDataValue(String)来操作底层值。

attributes.column.set 函数
  • 可选

为该列提供自定义设置器。使用this.setDataValue(String, Value)来操作底层值。

attributes.column.validate 对象
  • 可选

每次保存模型时要为该列执行的验证对象。可以是 validator.js 提供的验证的名称,是通过扩展 validator.js 提供的验证函数(有关更多详细信息,请参阅DAOValidator属性),或者是一个自定义验证函数。自定义验证函数使用字段的值和实例本身作为this绑定调用,并且可能接受第二个回调参数,以表明它们是异步的。如果验证器是同步的,则在验证失败的情况下应抛出异常;如果它是异步的,则应使用错误文本调用回调。

options 对象

这些选项与提供给 Sequelize 构造函数的默认 define 选项合并

options.sequelize 对象

定义要附加到新模型的 Sequelize 实例。如果没有提供,则抛出错误。

options.modelName 字符串
  • 可选

设置模型的名称。默认情况下与类名相同。

options.defaultScope 对象
  • 可选
  • default: {}

定义此模型使用的默认搜索范围。范围的格式与传递给 find / findAll 的选项相同。

options.scopes 对象
  • 可选

更多范围,定义方式与上面的 defaultScope 相同。有关范围定义方式以及您可以使用它们的更多信息,请参阅 Model.scope

options.omitNull 布尔值
  • 可选

不持久化空值。这意味着所有具有空值的列都不会被保存。

options.timestamps 布尔值
  • 可选
  • 默认值:true

在模型中添加 createdAt 和 updatedAt 时间戳。

options.paranoid 布尔值
  • 可选
  • 默认值:false

如果为真,则调用 destroy 不会删除模型,而是设置 deletedAt 时间戳。需要 timestamps=true 才能工作。

options.underscored 布尔值
  • 可选
  • 默认值:false

向所有属性添加下划线字段,这涵盖了用户定义的属性、时间戳和外键。不会影响显式设置 field 选项的属性。

options.freezeTableName 布尔值
  • 可选
  • 默认值:false

如果 freezeTableName 为真,Sequelize 将不会尝试更改模型名称以获取表名。否则,模型名称将被复数化。

options.name 对象
  • 可选

一个具有两个属性的对象,singularplural,当此模型与其他模型关联时使用。

options.name.singular 字符串
  • 可选
  • default: Utils.singularize(modelName)

模型的单数名称。

options.name.plural 字符串
  • 可选
  • default: Utils.pluralize(modelName)

模型的复数名称。

options.indexes Array<object>
  • 可选

索引定义。

options.indexes[].name 字符串
  • 可选

索引的名称。默认为模型名称 + _ + 连接的字段。

options.indexes[].type 字符串
  • 可选

索引类型。仅 mysql 使用。UNIQUEFULLTEXTSPATIAL 之一。

options.indexes[].using 字符串
  • 可选

创建索引的方法(SQL 中的 USING 语句)。BTREE 和 HASH 受 mysql 和 postgres 支持,而 postgres 另外支持 GIST 和 GIN。

options.indexes[].operator 字符串
  • 可选

指定索引运算符。

options.indexes[].unique 布尔值
  • 可选
  • 默认值:false

索引是否唯一?也可以通过将类型设置为 UNIQUE 来触发。

options.indexes[].concurrently 布尔值
  • 可选
  • 默认值:false

PostgresSQL 将在不获取任何写锁的情况下构建索引。仅限 Postgres。

options.indexes[].fields Array<string|object>
  • 可选

要索引的字段数组。每个字段可以是包含字段名称的字符串、Sequelize 对象(例如 sequelize.fn)或具有以下属性的对象:attribute(字段名称)、length(创建长度字符的索引)、order(列应排序的方向)、collate(列的排序规则)。

options.createdAt string | boolean
  • 可选

如果提供字符串,则覆盖 createdAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。

options.updatedAt string | boolean
  • 可选

如果提供字符串,则覆盖 updatedAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。

options.deletedAt string | boolean
  • 可选

如果提供字符串,则覆盖 deletedAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。

options.tableName 字符串
  • 可选

默认为复数化的模型名称,除非 freezeTableName 为真,在这种情况下它会直接使用模型名称。

options.schema 字符串
  • 可选
  • default: 'public'

schema

options.engine 字符串
  • 可选

指定模型表的引擎。

options.charset 字符串
  • 可选

指定模型表的字符集。

options.comment 字符串
  • 可选

指定模型表的注释。

options.collate 字符串
  • 可选

指定模型表的排序规则。

options.initialAutoIncrement 字符串
  • 可选

在 MySQL 中为表设置初始 AUTO_INCREMENT 值。

options.hooks 对象
  • 可选

一个在某些生命周期事件之前和之后调用的挂钩函数对象。可能的挂钩是:beforeValidate、afterValidate、validationFailed、beforeBulkCreate、beforeBulkDestroy、beforeBulkUpdate、beforeCreate、beforeDestroy、beforeUpdate、afterCreate、beforeSave、afterDestroy、afterUpdate、afterBulkCreate、afterSave、afterBulkDestroy 和 afterBulkUpdate。有关挂钩函数及其签名的更多信息,请参阅挂钩。每个属性可以是函数或函数数组。

options.validate 对象
  • 可选

一个模型范围验证的对象。验证可以访问 this 中的所有模型值。如果验证器函数接受参数,则假定它是异步的,并使用接受可选错误的回调调用。

options.whereMergeStrategy 'and' | 'overwrite'
  • 可选

指定范围合并策略(默认为 'overwrite')。'and' 策略将通过在最顶层添加 Op.and 来合并范围的 where 属性。'overwrite' 策略将使用最后定义的属性覆盖类似属性。

返回

Model

示例

Project.init({
  columnA: {
    type: Sequelize.BOOLEAN,
    validate: {
      is: ['[a-z]','i'],        // will only allow letters
      max: 23,                  // only allow values <= 23
      isIn: {
        args: [['en', 'zh']],
        msg: "Must be English or Chinese"
      }
    },
    field: 'column_a'
    // Other attributes here
  },
  columnB: Sequelize.STRING,
  columnC: 'MY VERY OWN COLUMN TYPE'
}, {sequelize})

sequelize.models.modelName // The model will now be available in models under the class name

public static async max(field: string, options: object): Promise<*> source

查找字段的最大值

参数

名称类型属性描述
field 字符串

属性/字段名称

options 对象
  • 可选

参见聚合

返回

Promise<*>

public static async min(field: string, options: object): Promise<*> source

查找字段的最小值

参数

名称类型属性描述
field 字符串

属性/字段名称

options 对象
  • 可选

参见聚合

返回

Promise<*>

public static removeAttribute(attribute: string) source

从模型定义中删除属性

参数

名称类型属性描述
attribute 字符串

要删除的属性名称

public static async restore(options: object): Promise source

如果启用了paranoid,则恢复多个实例。

参数

名称类型属性描述
options 对象

恢复选项

options.where 对象
  • 可选

过滤恢复

options.hooks 布尔值
  • 可选
  • 默认值:true

运行之前/之后批量恢复挂钩?

options.individualHooks 布尔值
  • 可选
  • 默认值:false

如果设置为 true,则恢复将在 where 参数中查找所有记录,并在每行上执行之前/之后批量恢复挂钩。

options.limit number
  • 可选

要撤消删除的行数(仅限 mysql)

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.transaction 事务
  • 可选

要在其下运行查询的事务

返回

Promise

public static schema(schema: string, options: object): Model source

将模式应用于此模型。对于 postgres,这实际上会将模式放在表名前面 - "schema"."tableName",而模式将被预先附加到 mysql 和 sqlite 的表名 - 'schema.tablename'

此方法适用于在多个模式中需要相同模型的用例。在这种用例中,重要的是为每个模型调用 model.schema(schema, [options]).sync() 以确保模型在正确的模式中创建。

如果需要每个模型的单个默认模式,请在模型的 define() 调用中设置 options.schema='schema' 参数。

参数

名称类型属性描述
schema 字符串

模式的名称

options 对象
  • 可选

模式选项

options.schemaDelimiter 字符串
  • 可选
  • default: '.'

将模式名称与表名分隔的字符。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

返回

Model

public static scope(option: Array | object | string): Model source

define中创建的范围应用于模型。

参数

名称类型属性描述
option Array | object | string
  • 可选
  • nullable: true

要应用的范围。范围可以作为连续参数传递,也可以作为参数数组传递。要应用没有参数的简单范围和范围函数,请将它们作为字符串传递。对于范围函数,请传递一个对象,其中包含一个 method 属性。该值可以是字符串(如果该方法不接受任何参数),也可以是数组(其中第一个元素是该方法的名称,连续元素是该方法的参数)。传递 null 以删除所有范围,包括默认范围。

返回

Model

对该模型的引用,其中应用了范围。再次对返回的模型调用 scope 将清除先前的范围。

示例

如何创建范围
const Model = sequelize.define('model', attributes, {
  defaultScope: {
    where: {
      username: 'dan'
    },
    limit: 12
  },
  scopes: {
    isALie: {
      where: {
        stuff: 'cake'
      }
    },
    complexFunction: function(email, accessLevel) {
      return {
        where: {
          email: {
            [Op.like]: email
          },
          access_level {
            [Op.gte]: accessLevel
          }
        }
      }
    }
  }
})

# As you have defined a default scope, every time you do Model.find, the default scope is appended to your query. Here's a couple of examples:

Model.findAll() // WHERE username = 'dan'
Model.findAll({ where: { age: { [Op.gt]: 12 } } }) // WHERE age > 12 AND username = 'dan'
要调用范围函数,您可以这样做
Model.scope({ method: ['complexFunction', '[email protected]', 42]}).findAll()
// WHERE email like '[email protected]%' AND access_level >= 42

public static async sum(field: string, options: object): Promise<number> source

查找字段的总和

参数

名称类型属性描述
field 字符串

属性/字段名称

options 对象
  • 可选

参见聚合

返回

Promise<number>

public static async sync(options: object): Promise<Model> source

将此模型同步到数据库,即创建表。

参数

名称类型属性描述
options 对象
  • 可选

同步选项

返回

Promise<Model>

public static async truncate(options: object): Promise source

截断模型的所有实例。这是 Model.destroy({ truncate: true }) 的一种便捷方法。

参数

名称类型属性描述
options 对象
  • 可选

除了截断之外,传递给 Model.destroy 的选项

options.cascade boolean | Function
  • 可选
  • 默认值:false

截断所有对命名表或由于 CASCADE 添加到组的任何表的具有外键引用的表。

options.restartIdentity 布尔值
  • 可选
  • 默认值:false

自动重新启动截断表中的列拥有的序列。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.logging boolean | Function
  • 可选

记录 sql 查询的函数,或 false 表示不记录

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise

public static unscoped(): Model source

获取未限定范围的模型

返回

Model

public static async update(values: object, options: object): Promise<Array<number, number>> source

更新与where选项匹配的多个实例。

参数

名称类型属性描述
values 对象

要更新的值的哈希表

options 对象

更新选项

options.where 对象

描述搜索范围的选项。

options.paranoid 布尔值
  • 可选
  • 默认值:true

如果为真,则仅更新未删除的记录。如果为假,则更新已删除和未删除的记录。仅适用于模型的options.paranoid为真的情况。

options.fields Array
  • 可选

要更新的字段(默认为所有字段)

options.validate 布尔值
  • 可选
  • 默认值:true

每行在插入之前是否应该进行验证。如果一行验证失败,则整个插入将失败。

options.hooks 布尔值
  • 可选
  • 默认值:true

运行批量更新钩子之前/之后?

options.sideEffects 布尔值
  • 可选
  • 默认值:true

是否更新任何虚拟设置器的副作用。

options.individualHooks 布尔值
  • 可选
  • 默认值:false

运行更新钩子之前/之后?。如果为真,这将执行一个 SELECT 后跟单独的 UPDATE。需要一个 select,因为需要将行数据传递给钩子

options.returning boolean | Array
  • 可选
  • 默认值:false

如果为 true,则追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres)

options.limit number
  • 可选

要更新的行数(仅适用于 mysql 和 mariadb,在 MSSQL 中实现为 TOP(n);对于 sqlite,仅当存在 rowid 时才支持)

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

返回

Promise<Array<number, number>>

该 promise 返回一个包含一个或两个元素的数组。第一个元素始终是受影响的行数,而第二个元素是实际受影响的行(仅在 postgres 中支持,options.returning 为真)。

public static async upsert(values: object, options: object): Promise<Array<Model, boolean|null>> source

插入或更新单行。如果找到与主键或唯一键上提供的 values 相匹配的行,则将执行更新。请注意,唯一索引必须在你的 Sequelize 模型中定义,而不仅仅是在表中定义。否则,你可能会遇到唯一约束冲突,因为 Sequelize 无法识别应该更新的行。

实现细节

  • MySQL - 使用 ON DUPLICATE KEY UPDATE` 实现
  • PostgreSQL - 使用 ON CONFLICT DO UPDATE 实现。如果更新数据包含 PK 字段,则 PK 被选为默认冲突键。否则,将选择第一个可以满足冲突键要求的唯一约束/索引。
  • SQLite - 使用 ON CONFLICT DO UPDATE 实现
  • MSSQL - 使用 MERGEWHEN (NOT) MATCHED THEN 实现单个查询

注意,Postgres/SQLite 返回创建的 null,无论该行是创建还是更新

参数

名称类型属性描述
values 对象

要 upsert 的值的哈希表

options 对象
  • 可选

upsert 选项

options.validate 布尔值
  • 可选
  • 默认值:true

在插入行之前运行验证

options.fields Array
  • 可选
  • default: Object.keys(this.attributes)

如果记录已存在,则要更新的字段。默认为所有已更改的字段。如果提供的 values 对象中没有指定字段,则仍会尝试插入,但将忽略重复键冲突。

options.hooks 布尔值
  • 可选
  • 默认值:true

运行 upsert 钩子之前/之后?

options.returning 布尔值
  • 可选
  • 默认值:true

如果为真,则获取回自动生成的 values

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.benchmark 布尔值
  • 可选
  • 默认值:false

将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.conflictFields Array<string>
  • 可选

ON CONFLICT 部分查询中冲突字段的可选覆盖。仅 Postgres >= 9.5 和 SQLite >= 3.24.0 支持。

返回

Promise<Array<Model, boolean|null>>

返回一个包含两个元素的数组,第一个是新记录,第二个是true(如果它刚刚创建)或false(如果它已存在)(除了 Postgres 和 SQLite,它们无法检测到这一点,并将始终返回null 而不是布尔值)。

公共构造函数

public constructor(values: object, options: object) source

构建一个新的模型实例。

参数

名称类型属性描述
values 对象
  • 可选
  • default: {}

键值对对象

options 对象
  • 可选

实例构造选项

options.raw 布尔值
  • 可选
  • 默认值:false

如果设置为 true,值将忽略字段和虚拟设置器。

options.isNewRecord 布尔值
  • 可选
  • 默认值:true

这是否是一条新记录

options.include Array
  • 可选

包含选项数组 - 用于构建预取/包含的模型实例。请参阅 set

公共成员

public isNewRecord: boolean: * source

如果此实例尚未持久保存到数据库,则返回 true

属性

名称类型属性描述
isNewRecord *

返回

布尔值

返回属性

名称类型属性描述
isNewRecord *

public get sequelize: Sequelize: * source

对sequelize实例的引用

属性

名称类型属性描述
sequelize *

返回

Sequelize

返回属性

名称类型属性描述
sequelize *

公共方法

public changed(key: string, value: any): boolean | Array source

如果使用字符串调用changed,它将返回一个布尔值,指示dataValues中该键的值是否与_previousDataValues中的值不同。

如果调用 changed 而不带参数,它将返回已更改的键的数组。

如果调用 changed 而不带参数且没有键更改,它将返回 false

请注意,当手动编辑嵌套(例如 JSON)属性中的属性时,此函数将返回 false,你必须在此类情况下手动调用 changed('key', true)。将写入一个全新的对象(例如,深度克隆)将被检测到。

参数

名称类型属性描述
key 字符串
  • 可选

要检查或更改状态的键

value any
  • 可选

要设置的值

返回

boolean | Array

示例

```
const mdl = await MyModel.findOne();
mdl.myJsonField.a = 1;
console.log(mdl.changed()) => false
mdl.save(); // this will not save anything
mdl.changed('myJsonField', true);
console.log(mdl.changed()) => ['myJsonField']
mdl.save(); // will save
```

public async decrement(fields: string | Array | object, options: object): Promise source

递减一个或多个列的值。这在数据库中完成,这意味着它不使用当前存储在 Instance 上的值。递减使用

SET column = column - X

查询完成。更新的实例将在 Postgres 中默认返回。但是,在其他方言中,你需要进行重新加载才能获取新值。

参数

名称类型属性描述
fields string | Array | object

如果提供字符串,则该列将递减by(在选项中给出)的值。如果提供数组,则每个列都将如此。如果提供对象,则每个列都将递减给定的值

options 对象
  • 可选

递减选项

options.by number
  • 可选
  • default: 1

要递减的数字

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.returning 布尔值
  • 可选
  • 默认值:true

附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres)

返回

Promise

示例

instance.decrement('number') // decrement number by 1

instance.decrement(['number', 'count'], { by: 2 }) // decrement number and count by 2

// decrement answer by 42, and tries by 1.
// `by` is ignored, since each column has its own value
instance.decrement({ answer: 42, tries: 1}, { by: 2 })

public async destroy(options: object): Promise source

销毁与该实例对应的行。根据你的 paranoid 设置,该行将被完全删除,或者其 deletedAt 时间戳将设置为当前时间。

参数

名称类型属性描述
options 对象
  • 可选
  • default: {}

销毁选项

options.force 布尔值
  • 可选
  • 默认值:false

如果设置为 true,则 paranoid 模型将被实际删除

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

返回

Promise

public equals(other: Model): boolean source

检查该实例和other实例是否引用同一行

参数

名称类型属性描述
other Model

要比较的其他实例

返回

布尔值

public equalsOneOf(others: Array<Model>): boolean source

通过调用equals检查该实例是否等于others中的一个。

参数

名称类型属性描述
others Array<Model>

要检查的实例数组

返回

布尔值

public get(key: string, options: object): object | any source

如果没有提供键,则返回实例的所有值,还会调用虚拟getter。

如果给出 key 并且存在该 key 的字段或虚拟 getter,它将调用该 getter - 否则它将返回该 key 的值。

参数

名称类型属性描述
key 字符串
  • 可选

要获取值的 key

options 对象
  • 可选

获取选项

options.plain 布尔值
  • 可选
  • 默认值:false

如果设置为 true,则包含的实例将作为普通对象返回

options.raw 布尔值
  • 可选
  • 默认值:false

如果设置为 true,则将忽略字段和虚拟设置器

返回

object | any

public getDataValue(key: string): any source

获取基础数据值的value

参数

名称类型属性描述
key 字符串

要在实例数据存储中查找的 key

返回

any

public async increment(fields: string | Array | object, options: object): Promise<Model> since 4.0.0 source

增加一个或多个列的值。这在数据库中完成,这意味着它不使用当前存储在实例上的值。增加使用的是

SET column = column + X

查询完成。更新的实例将在 Postgres 中默认返回。但是,在其他方言中,你需要进行重新加载才能获取新值。

参数

名称类型属性描述
fields string | Array | object

如果提供字符串,则该列将按 options 中给出的 by 值递减。如果提供数组,则每个列都是如此。如果提供对象,则每个列都按给定值递减。

options 对象
  • 可选

options

options.by number
  • 可选
  • default: 1

增加的数字

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.returning 布尔值
  • 可选
  • 默认值:true

附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres)

返回

Promise<Model>

示例

instance.increment('number') // increment number by 1

instance.increment(['number', 'count'], { by: 2 }) // increment number and count by 2

// increment answer by 42, and tries by 1.
// `by` is ignored, since each column has its own value
instance.increment({ answer: 42, tries: 1}, { by: 2 })

public isSoftDeleted(): boolean source

辅助方法,用于确定实例是否被“软删除”。如果实现者将deletedAt属性重命名为其他名称,这将特别有用。此方法要求启用paranoid

返回

布尔值

public previous(key: string): any | Array<any> source

_previousDataValues返回键的先前值。

如果未调用键,则返回所有已更改值的先前值

参数

名称类型属性描述
key 字符串
  • 可选

获取先前值的键

返回

any | Array<any>

public async reload(options: object): Promise<Model> source

在当前实例中刷新,即使用来自数据库的当前数据更新对象并返回同一个对象。这与执行find(Instance.id)不同,因为这将创建并返回一个新实例。使用此方法,对实例的所有引用都将使用新数据更新,并且不会创建任何新对象。

参数

名称类型属性描述
options 对象
  • 可选

传递给Model.find的选项

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

返回

Promise<Model>

public async restore(options: object): Promise source

恢复与该实例相对应的行。仅适用于paranoid模型。

参数

名称类型属性描述
options 对象
  • 可选
  • default: {}

恢复选项

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

返回

Promise

public async save(options: object): Promise<Model> source

验证该实例,如果验证通过,则将其持久化到数据库。

返回一个Promise,该Promise解析为保存的实例(或拒绝Sequelize.ValidationError,它将为每个验证失败的字段具有一个属性,其中包含该字段的错误消息)。

此方法针对仅对已更改的字段执行UPDATE进行了优化。如果没有任何更改,则不会执行任何SQL查询。

此方法不知道渴望加载的关联。换句话说,如果某个其他模型实例(子项)与该实例(父项)渴望加载,并且您更改了子项中的某些内容,则调用save()将简单地忽略对子项发生的更改。

参数

名称类型属性描述
options 对象
  • 可选

保存选项

options.fields string[]
  • 可选

一个可选的字符串数组,表示数据库列。如果提供 fields,则只验证和保存这些列。

options.silent 布尔值
  • 可选
  • 默认值:false

如果为 true,则不会更新 updatedAt 时间戳。

options.validate 布尔值
  • 可选
  • 默认值:true

如果为 false,则不会运行验证。

options.hooks 布尔值
  • 可选
  • 默认值:true

运行创建/更新+验证钩子之前和之后

options.logging 函数
  • 可选
  • 默认值:false

在运行查询时执行的函数,以记录 sql。

options.transaction 事务
  • 可选

要在其下运行查询的事务

options.searchPath 字符串
  • 可选
  • default: DEFAULT

一个可选参数,用于指定模式搜索路径(仅 Postgres)

options.returning 布尔值
  • 可选

附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres)

返回

Promise<Model>

public set(key: string | object, value: any, options: object): Model source

Set用于更新实例上的值(即实例的sequelize表示,请记住在实际调用save之前不会持久化任何内容)。在最基本的形式下,set将更新存储在基础dataValues对象中的值。但是,如果为键定义了自定义setter函数,则将改为调用该函数。要绕过setter,可以在选项对象中传递raw: true

如果set被调用带有对象,它将遍历对象,并为每个键值对递归调用set。如果将raw设置为true,则基础dataValues将直接设置为传递的对象,或者如果dataValues已经包含值,则将其用于扩展dataValues。

当调用set时,该字段的先前值将被存储,并设置更改标志(参见changed)。

Set也可以用于构建关联的实例,如果您有这些值。当使用set与关联一起使用时,您需要确保属性键与关联的别名匹配,同时还要确保已设置了正确的包含选项(来自.build()或.findOne())

如果在JSON/JSONB属性上调用带有点分隔键,它将设置嵌套的值并将整个对象标记为已更改。

参数

名称类型属性描述
key 字符串 | 对象

要设置的键,它可以是字符串或对象。当字符串时,它将设置该键,对于对象,它将遍历所有对象的属性并设置它们。

value any

要设置的值

options 对象
  • 可选

设置选项

options.raw 布尔值
  • 可选
  • 默认值:false

如果设置为 true,则将忽略字段和虚拟设置器

options.reset 布尔值
  • 可选
  • 默认值:false

清除所有先前设置的数据值

返回

Model

public setDataValue(key: string, value: any) source

更新底层数据值

参数

名称类型属性描述
key 字符串

要在实例数据存储中设置的键

value any

给定键的新值

public toJSON(): object source

将实例转换为JSON表示形式。代理调用不带键的get。这意味着获取从数据库获取的所有值,并应用所有自定义getter。

返回

对象

public async update(values: object, options: object): Promise<Model> source

这与调用 set 然后调用 save 相同,但它只保存传递给它的精确值,使其更原子化更安全。

参数

名称类型属性描述
values 对象

参见set

options 对象

参见save

返回

Promise<Model>

public async validate(options: object): Promise source

根据模型定义中设置的验证规则验证该实例的属性。

当且仅当验证成功时,承诺才实现;否则,它会拒绝一个包含{字段名:[错误消息]}条目的Error实例。

参数

名称类型属性描述
options 对象
  • 可选

传递给验证器的选项

options.skip Array
  • 可选

字符串数组。此数组中的所有属性都不会被验证

options.fields Array
  • 可选

字符串数组。只有此数组中的属性将被验证

options.hooks 布尔值
  • 可选
  • 默认值:true

在验证钩子前后运行

返回

Promise

public where(checkVersion: boolean): object source

获取表示该实例查询的对象,与 options.where 一起使用

参数

名称类型属性描述
checkVersion 布尔值
  • 可选
  • 默认值:false

在where哈希中包含版本属性

返回

对象