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
返回值。对于常规使用,建议直接访问属性或使用 get
,getDataValue
仅应在自定义 getter 时使用。
见
- Sequelize#define 了解更多关于 getter 和 setter 的信息
静态方法摘要
静态公共方法 | ||
public static |
为模型添加一个新的作用域。 |
|
public static |
async aggregate(attribute: string, aggregateFunction: string, options: object): Promise<DataTypes|object> 在指定字段上运行聚合方法 |
|
public static |
在此(源)和提供的目标之间创建一个关联。 |
|
public static |
belongsToMany(target: Model, options: object): BelongsToMany 使用联接表创建 N:M 关联。 |
|
public static |
构建一个新的模型实例。 |
|
public static |
批量创建和插入多个实例。 |
|
public static |
计算匹配提供的 where 子句的记录数。 |
|
public static |
构建一个新的模型实例,并在其上调用 save。 |
|
public static |
减少一个或多个列的值。 |
从 4.36.0 开始 |
public static |
在表上运行描述查询。 |
|
public static |
删除多个实例,或者如果启用了 |
|
public static |
删除此 Model 表示的表 |
|
public static |
搜索多个实例。 |
|
public static |
async findAndCountAll(options: object): Promise<{count: number|number[], rows: Model[]}> 查找与您的查询匹配的所有行,在指定的偏移量/限制范围内,并获取与您的查询匹配的总行数。 |
|
public static |
通过主键搜索单个实例。 |
|
public static |
async findCreateFind(options: object): Promise<Model, boolean> 一个更高效的 findOrCreate,它可能无法在事务下工作(在 postgres 中工作)。它将执行 find 调用,如果为空,则尝试创建,如果唯一约束,则尝试再次查找。 |
|
public static |
搜索单个实例。 |
|
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 |
getAttributes(): object | any 返回模型的属性。 |
|
public static |
getTableName(): string | object 获取模型的表名,考虑架构。 |
|
public static |
在此(源)和提供的目标之间创建一个 1:m 关联。 |
|
public static |
在此(源)和提供的目标之间创建一个关联。 |
|
public static |
增加一个或多个列的值。 |
|
public static |
使用属性和选项初始化模型,该模型表示数据库中的表。 |
|
public static |
查找字段的最大值 |
|
public static |
查找字段的最小值 |
|
public static |
removeAttribute(attribute: string) 从模型定义中删除属性 |
|
public static |
如果启用了 |
|
public static |
将模式应用于此模型。 |
|
public static |
将 |
|
public static |
查找字段的总和 |
|
public static |
将此模型同步到数据库,即创建表。 |
|
public static |
截断模型的所有实例。 |
|
public static |
获取未限定范围的模型 |
|
public static |
更新与where选项匹配的多个实例。 |
|
public static |
插入或更新单行。 |
构造函数概要
公共构造函数 | ||
public |
constructor(values: object, options: object) 构建一个新的模型实例。 |
成员概要
公共成员 | ||
public |
isNewRecord: boolean: * 如果此实例尚未持久保存到数据库,则返回 true |
|
public get |
对sequelize实例的引用 |
方法概要
公共方法 | ||
public |
如果使用字符串调用changed,它将返回一个布尔值,指示 |
|
public |
减少一个或多个列的值。 |
|
public |
销毁与该实例对应的行。 |
|
public |
检查该实例和 |
|
public |
equalsOneOf(others: Array<Model>): boolean 通过调用equals检查该实例是否等于 |
|
public |
如果没有提供键,则返回实例的所有值,还会调用虚拟getter。 |
|
public |
getDataValue(key: string): any 获取基础数据值的value |
|
public |
增加一个或多个列的值。 |
自 4.0.0 起 |
public |
辅助方法,用于确定实例是否被“软删除”。 |
|
public |
从 |
|
public |
就地刷新当前实例,即 |
|
public |
恢复与该实例对应的行。 |
|
public |
验证该实例,如果验证通过,则将其持久化到数据库。 |
|
public |
Set 用于更新实例上的值(即 Sequelize 实例的表示,请记住在实际调用 |
|
public |
setDataValue(key: 字符串, value: 任何) 更新底层数据值 |
|
public |
将实例转换为 JSON 表示形式。 |
|
public |
这与调用 |
|
public |
根据模型定义中设置的验证规则验证该实例的属性。 |
|
public |
获取表示该实例查询的对象,与 |
静态公共方法
公有 静态 addScope(name: 字符串, scope: 对象 | 函数, options: 对象) 源代码
向模型添加新的作用域。这在添加包含作用域时特别有用,此时您要包含的模型在定义该模型时不可用。
默认情况下,如果已经存在具有该名称的作用域,这将抛出错误。在 options 对象中传递 override: true
以静默此错误。
公有 静态 异步 aggregate(attribute: 字符串, aggregateFunction: 字符串, options: 对象): Promise<DataTypes|对象> 源代码
在指定字段上运行聚合方法
参数
名称 | 类型 | 属性 | 描述 |
attribute | 字符串 | 要聚合的属性。可以是字段名称或 * |
|
aggregateFunction | 字符串 | 用于聚合的函数,例如 sum、max 等。 |
|
options | 对象 |
|
查询选项。有关完整选项,请参阅 sequelize.query |
options.where | 对象 |
|
搜索属性的哈希表。 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.dataType | DataTypes | 字符串 |
|
结果的类型。如果 |
options.distinct | 布尔值 |
|
将 DISTINCT 应用于正在聚合的字段 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.plain | 布尔值 |
|
当为 |
公有 静态 belongsTo(target: Model, options: 对象): BelongsTo 源代码
在该模型(源模型)和提供的目标模型之间创建关联。外键将添加到源模型上。
参数
名称 | 类型 | 属性 | 描述 |
target | Model | 目标模型 |
|
options | 对象 |
|
belongsTo 关联选项 |
options.hooks | 布尔值 |
|
设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 |
options.as | 字符串 |
|
该模型的别名,以单数形式。另请参阅传递给 |
options.foreignKey | 字符串 | 对象 |
|
源表中外键属性的名称,或表示外键列类型定义的对象(有关语法,请参阅 |
options.targetKey | 字符串 |
|
要作为目标表中关联键使用的属性的名称。默认为目标表的primaryKey |
options.onDelete | 字符串 |
|
如果 foreignKey 允许为空,则为 SET NULL,否则为 NO ACTION |
options.onUpdate | 字符串 |
|
设置 'ON UPDATE' |
options.constraints | 布尔值 |
|
是否应在外键上启用 on update 和 on delete 约束。 |
示例
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 | 布尔值 |
|
设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 |
options.through | Model | 字符串 | 对象 | 在 n:m 关联中用于联接源和目标的表的名称。如果要自己定义联接表并向其中添加其他属性,也可以是 Sequelize 模型。 |
|
options.through.model | Model |
|
用于联接 N:M 关联两边的模型。 |
options.through.scope | 对象 |
|
将在 through 模型上用于关联创建和查找默认值的键值集。(请记住将属性添加到 through 模型) |
options.through.unique | 布尔值 |
|
如果为 true,将从使用的外键生成唯一键(使用作用域时可能想要关闭此选项并创建特定唯一键) |
options.through.paranoid | 布尔值 |
|
如果为 true,则生成的联接表将是 paranoid |
options.as | 字符串 | 对象 |
|
该关联的别名。如果您提供字符串,则它应该是复数形式,并且将使用 node.inflection 转换为单数形式。如果您要自己控制单数形式,请提供具有 |
options.foreignKey | 字符串 | 对象 |
|
联接表中外键的名称(代表源模型),或者一个对象,该对象表示外键列的类型定义(请参阅 |
options.otherKey | 字符串 | 对象 |
|
联接表中外键的名称(代表目标模型),或者一个对象,该对象表示其他列的类型定义(请参阅 |
options.scope | 对象 |
|
一个键值对,用于关联目标的创建和查找默认值。(sqlite 不支持 N:M) |
options.timestamps | 布尔值 |
|
联接模型是否应该有时间戳 |
options.onDelete | 字符串 |
|
如果这是 n:m,则级联;如果是 1:m,则设置为空 |
options.onUpdate | 字符串 |
|
设置 |
options.constraints | 布尔值 |
|
是否应在外键上启用 on update 和 on delete 约束。 |
示例
// 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
构建一个新的模型实例。
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 | 布尔值 |
|
每行在插入之前是否应该进行验证。如果一行验证失败,则整个插入将失败。 |
options.hooks | 布尔值 |
|
在批量创建钩子之前/之后运行? |
options.individualHooks | 布尔值 |
|
对每个单独的实例运行创建钩子之前/之后?如果 options.hooks 为 true,则仍将运行 BulkCreate 钩子。 |
options.ignoreDuplicates | 布尔值 |
|
忽略主键的重复值?(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 | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.returning | boolean | Array |
|
如果为 true,则追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres) |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
public static async count(options: object): Promise<number> source
计算匹配提供的 where 子句的记录数。
如果您提供 include
选项,则将计算匹配关联的数量。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
options |
options.where | 对象 |
|
搜索属性的哈希表。 |
options.include | 对象 |
|
包含选项。有关详细信息,请参阅 |
options.paranoid | 布尔值 |
|
设置为 |
options.distinct | 布尔值 |
|
对主键或 options.col 应用 COUNT(DISTINCT(col))。 |
options.col | 字符串 |
|
应应用 COUNT() 的列 |
options.attributes | Array |
|
与 |
options.group | Array |
|
用于创建复杂的计数。将根据需要返回多行。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
public static async create(values: object, options: object): Promise<Model> source
构建一个新的模型实例,并在其上调用 save。
参数
名称 | 类型 | 属性 | 描述 |
values | 对象 | 要使用其创建新记录的数据值哈希 |
|
options | 对象 |
|
构建和查询选项 |
options.raw | 布尔值 |
|
如果设置为 true,值将忽略字段和虚拟设置器。 |
options.isNewRecord | 布尔值 |
|
这是否是新记录 |
options.include | Array |
|
包含选项数组 - 用于构建预取/包含的模型实例。请参阅 |
options.fields | string[] |
|
一个可选的字符串数组,表示数据库列。如果提供 fields,则只验证和保存这些列。 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
options.validate | 布尔值 |
|
如果为 false,则不会运行验证。 |
options.hooks | 布尔值 |
|
运行创建/更新+验证钩子之前和之后 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.returning | boolean | Array |
|
追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres) |
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'
查询完成。要获得减少到实例后的正确值,您应该进行重新加载。
示例
Model.decrement('number', { where: { foo: 'bar' });
Model.decrement(['number', 'count'], { by: 2, where: { foo: 'bar' } });
// `by` is ignored, since each column has its own value
Model.decrement({ answer: 42, tries: -1}, { by: 2, where: { foo: 'bar' } });
public static async destroy(options: object): Promise<number> source
删除多个实例,或者如果启用了 paranoid
,则将其 deletedAt 时间戳设置为当前时间。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 | 销毁选项 |
|
options.where | 对象 |
|
过滤销毁 |
options.hooks | 布尔值 |
|
在批量销毁钩子之前/之后运行? |
options.individualHooks | 布尔值 |
|
如果设置为 true,销毁将 SELECT 所有与 where 参数匹配的记录,并将对每行执行销毁钩子之前/之后。 |
options.limit | number |
|
要删除的行数 |
options.force | 布尔值 |
|
删除而不是将 deletedAt 设置为当前时间戳(仅当启用 |
options.truncate | 布尔值 |
|
如果设置为 true,支持它的方言将使用 TRUNCATE 而不是 DELETE FROM。如果截断表,则忽略 where 和 limit 选项。 |
options.cascade | 布尔值 |
|
仅与 TRUNCATE 结合使用。截断所有对命名表或由于 CASCADE 添加到该组的任何表具有外键引用的表。 |
options.restartIdentity | 布尔值 |
|
仅与 TRUNCATE 结合使用。自动重启被截断表中的列拥有的序列。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
public static async findAll(options: object): Promise<Array<Model>> source
搜索多个实例。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
描述搜索范围的选项哈希表 |
options.where | 对象 |
|
描述搜索的属性哈希表。请参阅上面的示例。 |
options.attributes | Array<string> | object |
|
您要选择的属性列表,或包含 |
options.attributes.include | Array<string> |
|
选择模型的所有属性,以及一些额外的属性。对于聚合很有用,例如 |
options.attributes.exclude | Array<string> |
|
选择模型的所有属性,除了少数几个属性。对于安全目的很有用,例如 |
options.paranoid | 布尔值 |
|
如果为 true,则仅返回未删除的记录。如果为 false,则返回已删除和未删除的记录。仅适用于模型的 |
options.include | Array<object|Model|string> |
|
使用左连接热加载关联的列表。支持 |
options.include[].model | Model |
|
您要热加载的模型 |
options.include[].as | 字符串 |
|
关系的别名,如果您要热加载的模型是别名的。对于 |
options.include[].association | 关联 |
|
您要热加载的关联。(这可以用来代替提供模型/别名对) |
options.include[].where | 对象 |
|
应用于子模型的 where 子句。请注意,这会将热加载转换为内连接,除非您明确设置 |
options.include[].or | 布尔值 |
|
是否使用 OR 而不是 AND 将 ON 和 WHERE 子句绑定在一起。 |
options.include[].on | 对象 |
|
为连接提供您自己的 ON 条件。 |
options.include[].attributes | Array<string> |
|
从子模型中选择的属性列表 |
options.include[].required | 布尔值 |
|
如果为 true,则转换为内连接,这意味着只有在父模型具有任何匹配的子模型时才会加载父模型。如果设置了 |
options.include[].right | 布尔值 |
|
如果为 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 |
|
指定排序。使用数组,您可以提供多个要排序的列/函数。每个元素可以进一步包装在一个包含两个元素的数组中。第一个元素是要排序的列/函数,第二个是方向。例如: |
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 | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.having | 对象 |
|
Having 选项 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.rejectOnEmpty | boolean | Error |
|
当没有找到记录时抛出错误 |
options.dotNotation | 布尔值 |
|
允许包含具有相同属性/列名称的表 - 这些表在其中包含一个点。 |
options.nest | 布尔值 |
|
如果为 true,则将具有“.”分隔的属性名称的对象转换为嵌套对象。 |
示例
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
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 选项 |
示例
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
见
- Model.findAll 用于查找和查询选项的规范
- Model.count 用于计数选项的规范
public static async findByPk(param: number | bigint | string | Buffer, options: object): Promise<Model> source
通过主键搜索单个实例。
见
- Model.findAll 用于选项的完整解释,请注意不支持 options.where。
public static async findCreateFind(options: object): Promise<Model, boolean> source
一个更高效的 findOrCreate,它可能无法在事务下工作(在 postgres 中工作)。它将执行 find 调用,如果为空,则尝试创建,如果唯一约束,则尝试再次查找。
见
- Model.findAll 用于查找和选项的完整规范
public static async findOne(options: object): Promise<Model|null> source
搜索单个实例。返回找到的第一个实例,如果找不到任何实例,则返回 null。
见
- Model.findAll 用于解释选项
public static async findOrBuild(options: object): Promise<Model, boolean> source
查找与查询匹配的行,或者如果没有找到,则构建(但不保存)该行。promise 的成功结果将是(instance, built)
public static async findOrCreate(options: object): Promise<Model, boolean> source
查找与查询匹配的行,或者如果没有找到,则构建并保存该行。promise 的成功结果将是(instance, created)
如果在options
对象中没有传递事务,则会在内部创建一个新事务,以防止在查找后但插入调用之前,另一个连接创建匹配行的竞争条件。但是,在 SQLite 中并不总是可以处理这种情况,特别是当一个事务插入而另一个事务试图在第一个事务提交之前进行选择时。在这种情况下,将抛出sequelize.TimeoutError
实例。如果创建了事务,则会创建一个保存点,并且任何唯一约束冲突都会在内部处理。
见
- Model.findAll 用于查找和选项的完整规范
public static getTableName(): string | object source
获取模型的表名,考虑模式。如果模型没有模式,该方法将返回名称作为字符串,否则将返回一个包含tableName
、schema
和delimiter
属性的对象。
public static hasMany(target: Model, options: object): HasMany source
在当前模型(源)和提供的目标模型之间创建一个 1:m 关联。外键添加到目标模型。
参数
名称 | 类型 | 属性 | 描述 |
target | Model | 目标模型 |
|
options | 对象 |
|
hasMany 关联选项 |
options.hooks | 布尔值 |
|
设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 |
options.as | 字符串 | 对象 |
|
当前模型的别名。如果您提供一个字符串,它应该是复数形式,并将使用 node.inflection 转换为单数形式。如果您想自己控制单数形式,请提供一个包含 |
options.foreignKey | 字符串 | 对象 |
|
目标表中外键的名称,或表示外键列类型定义的对象(有关语法,请参阅 |
options.sourceKey | 字符串 |
|
源表中用作关联键的字段的名称。默认值为源表的主键 |
options.scope | 对象 |
|
一个键值对,用于关联目标的创建和查找默认值。(sqlite 不支持 N:M) |
options.onDelete | 字符串 |
|
如果外键允许为空值,则为 SET NULL,否则为 CASCADE |
options.onUpdate | 字符串 |
|
设置 |
options.constraints | 布尔值 |
|
是否应在外键上启用 on update 和 on delete 约束。 |
示例
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 | 布尔值 |
|
设置为 true 以在关联模型因级联而删除时运行 before-/afterDestroy 钩子。例如,如果 |
options.as | 字符串 |
|
该模型的别名,以单数形式。另请参阅传递给 |
options.foreignKey | 字符串 | 对象 |
|
目标模型中外键属性的名称,或表示外键列类型定义的对象(有关语法,请参阅 |
options.sourceKey | 字符串 |
|
用作源表中关联键的属性的名称。默认值为源表的主键 |
options.onDelete | 字符串 |
|
如果外键允许为空值,则为 SET NULL,否则为 CASCADE |
options.onUpdate | 字符串 |
|
设置 'ON UPDATE' |
options.constraints | 布尔值 |
|
是否应在外键上启用 on update 和 on delete 约束。 |
options.uniqueKey | 字符串 |
|
唯一约束的自定义名称。 |
示例
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 中给出的 |
|
options | 对象 | increment 选项 |
|
options.where | 对象 | 条件哈希 |
|
options.by | number |
|
增加的数字 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
示例
Model.increment('number', { where: { foo: 'bar' });
Model.increment(['number', 'count'], { by: 2, where: { foo: 'bar' } });
// `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 | 布尔值 |
|
如果为 false,则列将具有 NOT NULL 约束,并且在保存实例之前将运行非空验证。 |
attributes.column.defaultValue | any |
|
文字默认值、JavaScript 函数或 SQL 函数(请参阅 |
attributes.column.unique | string | boolean |
|
如果为 true,则列将获得一个唯一约束。如果提供了一个字符串,则列将成为复合唯一索引的一部分。如果多个列具有相同的字符串,则它们将成为同一唯一索引的一部分 |
attributes.column.primaryKey | 布尔值 |
|
如果为 true,则此属性将被标记为主键 |
attributes.column.field | 字符串 |
|
如果设置,sequelize 将属性名称映射到数据库中的不同名称 |
attributes.column.autoIncrement | 布尔值 |
|
如果为 true,则此列将设置为自动递增 |
attributes.column.autoIncrementIdentity | 布尔值 |
|
如果为 true,与 autoIncrement=true 结合使用,将使用 Postgres |
attributes.column.comment | 字符串 |
|
此列的注释 |
attributes.column.references | string | Model |
|
包含引用配置的对象 |
attributes.column.references.model | string | Model |
|
如果此列引用另一个表,请在此处提供它作为模型或字符串 |
attributes.column.references.key | 字符串 |
|
此列引用的外表的列 |
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 | 函数 |
|
为该列提供自定义获取器。使用 |
attributes.column.set | 函数 |
|
为该列提供自定义设置器。使用 |
attributes.column.validate | 对象 |
|
每次保存模型时要为该列执行的验证对象。可以是 validator.js 提供的验证的名称,是通过扩展 validator.js 提供的验证函数(有关更多详细信息,请参阅 |
options | 对象 | 这些选项与提供给 Sequelize 构造函数的默认 define 选项合并 |
|
options.sequelize | 对象 | 定义要附加到新模型的 Sequelize 实例。如果没有提供,则抛出错误。 |
|
options.modelName | 字符串 |
|
设置模型的名称。默认情况下与类名相同。 |
options.defaultScope | 对象 |
|
定义此模型使用的默认搜索范围。范围的格式与传递给 find / findAll 的选项相同。 |
options.scopes | 对象 |
|
更多范围,定义方式与上面的 defaultScope 相同。有关范围定义方式以及您可以使用它们的更多信息,请参阅 |
options.omitNull | 布尔值 |
|
不持久化空值。这意味着所有具有空值的列都不会被保存。 |
options.timestamps | 布尔值 |
|
在模型中添加 createdAt 和 updatedAt 时间戳。 |
options.paranoid | 布尔值 |
|
如果为真,则调用 |
options.underscored | 布尔值 |
|
向所有属性添加下划线字段,这涵盖了用户定义的属性、时间戳和外键。不会影响显式设置 |
options.freezeTableName | 布尔值 |
|
如果 freezeTableName 为真,Sequelize 将不会尝试更改模型名称以获取表名。否则,模型名称将被复数化。 |
options.name | 对象 |
|
一个具有两个属性的对象, |
options.name.singular | 字符串 |
|
模型的单数名称。 |
options.name.plural | 字符串 |
|
模型的复数名称。 |
options.indexes | Array<object> |
|
索引定义。 |
options.indexes[].name | 字符串 |
|
索引的名称。默认为模型名称 + _ + 连接的字段。 |
options.indexes[].type | 字符串 |
|
索引类型。仅 mysql 使用。 |
options.indexes[].using | 字符串 |
|
创建索引的方法(SQL 中的 |
options.indexes[].operator | 字符串 |
|
指定索引运算符。 |
options.indexes[].unique | 布尔值 |
|
索引是否唯一?也可以通过将类型设置为 |
options.indexes[].concurrently | 布尔值 |
|
PostgresSQL 将在不获取任何写锁的情况下构建索引。仅限 Postgres。 |
options.indexes[].fields | Array<string|object> |
|
要索引的字段数组。每个字段可以是包含字段名称的字符串、Sequelize 对象(例如 |
options.createdAt | string | boolean |
|
如果提供字符串,则覆盖 createdAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。 |
options.updatedAt | string | boolean |
|
如果提供字符串,则覆盖 updatedAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。 |
options.deletedAt | string | boolean |
|
如果提供字符串,则覆盖 deletedAt 属性的名称;如果为假,则禁用它。时间戳必须为真。下划线字段将使用下划线设置设置。 |
options.tableName | 字符串 |
|
默认为复数化的模型名称,除非 freezeTableName 为真,在这种情况下它会直接使用模型名称。 |
options.schema | 字符串 |
|
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 | 对象 |
|
一个模型范围验证的对象。验证可以访问 |
options.whereMergeStrategy | 'and' | 'overwrite' |
|
指定范围合并策略(默认为 'overwrite')。'and' 策略将通过在最顶层添加 |
示例
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
查找字段的最大值
见
- 有关选项,请参阅 Model.aggregate
public static async min(field: string, options: object): Promise<*> source
查找字段的最小值
见
- 有关选项,请参阅 Model.aggregate
public static removeAttribute(attribute: string) source
从模型定义中删除属性
参数
名称 | 类型 | 属性 | 描述 |
attribute | 字符串 | 要删除的属性名称 |
public static async restore(options: object): Promise source
如果启用了paranoid
,则恢复多个实例。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 | 恢复选项 |
|
options.where | 对象 |
|
过滤恢复 |
options.hooks | 布尔值 |
|
运行之前/之后批量恢复挂钩? |
options.individualHooks | 布尔值 |
|
如果设置为 true,则恢复将在 where 参数中查找所有记录,并在每行上执行之前/之后批量恢复挂钩。 |
options.limit | number |
|
要撤消删除的行数(仅限 mysql) |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
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'
参数。
见
- 有关设置默认模式的更多信息,请参阅 Sequelize#define。
public static scope(option: Array | object | string): Model source
将define
中创建的范围应用于模型。
示例
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
查找字段的总和
见
- 有关选项,请参阅 Model.aggregate
public static async sync(options: object): Promise<Model> source
将此模型同步到数据库,即创建表。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
同步选项 |
见
- 有关选项,请参阅 Sequelize#sync
public static async truncate(options: object): Promise source
截断模型的所有实例。这是 Model.destroy({ truncate: true }) 的一种便捷方法。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
除了截断之外,传递给 Model.destroy 的选项 |
options.cascade | boolean | Function |
|
截断所有对命名表或由于 CASCADE 添加到组的任何表的具有外键引用的表。 |
options.restartIdentity | 布尔值 |
|
自动重新启动截断表中的列拥有的序列。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.logging | boolean | Function |
|
记录 sql 查询的函数,或 false 表示不记录 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
见
- Model.destroy 了解更多信息
public static async update(values: object, options: object): Promise<Array<number, number>> source
更新与where选项匹配的多个实例。
参数
名称 | 类型 | 属性 | 描述 |
values | 对象 | 要更新的值的哈希表 |
|
options | 对象 | 更新选项 |
|
options.where | 对象 | 描述搜索范围的选项。 |
|
options.paranoid | 布尔值 |
|
如果为真,则仅更新未删除的记录。如果为假,则更新已删除和未删除的记录。仅适用于模型的 |
options.fields | Array |
|
要更新的字段(默认为所有字段) |
options.validate | 布尔值 |
|
每行在插入之前是否应该进行验证。如果一行验证失败,则整个插入将失败。 |
options.hooks | 布尔值 |
|
运行批量更新钩子之前/之后? |
options.sideEffects | 布尔值 |
|
是否更新任何虚拟设置器的副作用。 |
options.individualHooks | 布尔值 |
|
运行更新钩子之前/之后?。如果为真,这将执行一个 SELECT 后跟单独的 UPDATE。需要一个 select,因为需要将行数据传递给钩子 |
options.returning | boolean | Array |
|
如果为 true,则追加 RETURNING <模型列> 以获取回所有定义的值;如果为列名数组,则追加 RETURNING <列> 以获取回特定列(仅 Postgres) |
options.limit | number |
|
要更新的行数(仅适用于 mysql 和 mariadb,在 MSSQL 中实现为 TOP(n);对于 sqlite,仅当存在 rowid 时才支持) |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
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 - 使用
MERGE
和WHEN (NOT) MATCHED THEN
实现单个查询
注意,Postgres/SQLite 返回创建的 null,无论该行是创建还是更新
参数
名称 | 类型 | 属性 | 描述 |
values | 对象 | 要 upsert 的值的哈希表 |
|
options | 对象 |
|
upsert 选项 |
options.validate | 布尔值 |
|
在插入行之前运行验证 |
options.fields | Array |
|
如果记录已存在,则要更新的字段。默认为所有已更改的字段。如果提供的 |
options.hooks | 布尔值 |
|
运行 upsert 钩子之前/之后? |
options.returning | 布尔值 |
|
如果为真,则获取回自动生成的 values |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.benchmark | 布尔值 |
|
将查询执行时间(以毫秒为单位)作为第二个参数传递给日志记录函数(options.logging)。 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.conflictFields | Array<string> |
|
ON CONFLICT 部分查询中冲突字段的可选覆盖。仅 Postgres >= 9.5 和 SQLite >= 3.24.0 支持。 |
返回
Promise<Array<Model, boolean|null>> | 返回一个包含两个元素的数组,第一个是新记录,第二个是 |
公共构造函数
公共方法
public changed(key: string, value: any): boolean | Array source
如果使用字符串调用changed,它将返回一个布尔值,指示dataValues
中该键的值是否与_previousDataValues
中的值不同。
如果调用 changed 而不带参数,它将返回已更改的键的数组。
如果调用 changed 而不带参数且没有键更改,它将返回 false
。
请注意,当手动编辑嵌套(例如 JSON)属性中的属性时,此函数将返回 false
,你必须在此类情况下手动调用 changed('key', true)
。将写入一个全新的对象(例如,深度克隆)将被检测到。
参数
名称 | 类型 | 属性 | 描述 |
key | 字符串 |
|
要检查或更改状态的键 |
value | any |
|
要设置的值 |
示例
```
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 | 如果提供字符串,则该列将递减 |
|
options | 对象 |
|
递减选项 |
options.by | number |
|
要递减的数字 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.returning | 布尔值 |
|
附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres) |
示例
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 时间戳将设置为当前时间。
public get(key: string, options: object): object | any source
如果没有提供键,则返回实例的所有值,还会调用虚拟getter。
如果给出 key 并且存在该 key 的字段或虚拟 getter,它将调用该 getter - 否则它将返回该 key 的值。
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 中给出的 |
|
options | 对象 |
|
options |
options.by | number |
|
增加的数字 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.returning | 布尔值 |
|
附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres) |
示例
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 | 字符串 |
|
获取先前值的键 |
public async reload(options: object): Promise<Model> source
在当前实例中刷新,即使用来自数据库的当前数据更新对象并返回同一个对象。这与执行find(Instance.id)
不同,因为这将创建并返回一个新实例。使用此方法,对实例的所有引用都将使用新数据更新,并且不会创建任何新对象。
public async save(options: object): Promise<Model> source
验证该实例,如果验证通过,则将其持久化到数据库。
返回一个Promise,该Promise解析为保存的实例(或拒绝Sequelize.ValidationError
,它将为每个验证失败的字段具有一个属性,其中包含该字段的错误消息)。
此方法针对仅对已更改的字段执行UPDATE进行了优化。如果没有任何更改,则不会执行任何SQL查询。
此方法不知道渴望加载的关联。换句话说,如果某个其他模型实例(子项)与该实例(父项)渴望加载,并且您更改了子项中的某些内容,则调用save()
将简单地忽略对子项发生的更改。
参数
名称 | 类型 | 属性 | 描述 |
options | 对象 |
|
保存选项 |
options.fields | string[] |
|
一个可选的字符串数组,表示数据库列。如果提供 fields,则只验证和保存这些列。 |
options.silent | 布尔值 |
|
如果为 true,则不会更新 updatedAt 时间戳。 |
options.validate | 布尔值 |
|
如果为 false,则不会运行验证。 |
options.hooks | 布尔值 |
|
运行创建/更新+验证钩子之前和之后 |
options.logging | 函数 |
|
在运行查询时执行的函数,以记录 sql。 |
options.transaction | 事务 |
|
要在其下运行查询的事务 |
options.searchPath | 字符串 |
|
一个可选参数,用于指定模式搜索路径(仅 Postgres) |
options.returning | 布尔值 |
|
附加 RETURNING * 以获取回自动生成的 values(仅限 Postgres) |
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属性上调用带有点分隔键,它将设置嵌套的值并将整个对象标记为已更改。
见
- Model.findAll 以获取有关包含的更多信息
public setDataValue(key: string, value: any) source
更新底层数据值
参数
名称 | 类型 | 属性 | 描述 |
key | 字符串 | 要在实例数据存储中设置的键 |
|
value | any | 给定键的新值 |
public async update(values: object, options: object): Promise<Model> source
这与调用 set
然后调用 save
相同,但它只保存传递给它的精确值,使其更原子化更安全。