指南 参考 源码
public class | source

多对多关联

继承

Association → BelongsToMany

通过连接表实现的多对多关联。

当连接表具有其他属性时,这些属性可以传递到 options 对象中。

UserProject = sequelize.define('user_project', {
  role: Sequelize.STRING
});
User.belongsToMany(Project, { through: UserProject });
Project.belongsToMany(User, { through: UserProject });
// through is required!

user.addProject(project, { through: { role: 'manager' }});

所有方法都允许您传递持久化实例、其主键或两者混合。

const project = await Project.create({ id: 11 });
await user.addProjects([project, 12]);

如果您想设置多个目标实例,但使用不同的属性,则必须使用通过模型名称的属性在实例上设置属性。

p1.UserProjects = {
  started: true
}
user.setProjects([p1, p2], { through: { started: false }}) // The default value is false, but p1 overrides that.

同样,当通过具有自定义属性的连接表获取数据时,这些属性将作为具有通过模型名称的对象提供。

const projects = await user.getProjects();
const p1 = projects[0];
p1.UserProjects.started // Is this project started yet?

在下面的 API 引用中,将关联的名称添加到方法中,例如,对于 User.belongsToMany(Project),getter 将为 user.getProjects()

参见

方法摘要

公共方法
public

async add(sourceInstance: Model, newInstances: Model | Model[] | string[] | string | number[] | number, options: object): Promise

将一个或多个行与源实例关联。

public

async count(instance: Model, options: object): Promise<number>

使用可选的 where 子句,计算当前与之关联的所有内容。

public

async create(sourceInstance: Model, values: object, options: object): Promise

创建关联模型的新实例并将其与之关联。

public

async get(instance: Model, options: object): Promise<Array<Model>>

使用可选的 where 子句,获取当前与之关联的所有内容。

public

async has(sourceInstance: Model, instances: Model | Model[] | string[] | string | number[] | number, options: object): Promise<boolean>

检查一个或多个实例是否与之关联。

public

remove(sourceInstance: Model, oldAssociatedObjects: Model | Model[] | string | string[] | number | number[], options: object): Promise

取消关联一个或多个实例。

public

async set(sourceInstance: Model, newAssociatedObjects: Model | Model[] | string[] | string | number[] | number, options: object): Promise

通过传递实例数组或其主键来设置关联的模型。

继承摘要

从类 Association
public

关联类型。

public
public

公共方法

public async add(sourceInstance: Model, newInstances: Model | Model[] | string[] | string | number[] | number, options: object): Promise source

将一个或多个行与源实例关联。它不会取消关联 newInstances 中可能缺少的任何已关联的实例。

参数

名称类型属性描述
sourceInstance Model

要与新实例关联的源实例

newInstances Model | Model[] | string[] | string | number[] | number
  • 可选

单个实例或主键,或持久化实例或主键的混合数组

options object
  • 可选

传递给 through.findAllbulkCreateupdate 的选项

options.validate object
  • 可选

为连接模型运行验证。

options.through object
  • 可选

连接表的附加属性。

返回

Promise

public async count(instance: Model, options: object): Promise<number> source

使用可选的 where 子句,计算当前与之关联的所有内容。

参数

名称类型属性描述
instance Model

instance

options object
  • 可选

查找选项

options.where object
  • 可选

可选的 where 子句,用于限制关联的模型

options.scope 字符串 | 布尔值
  • 可选

在相关模型上应用范围,或通过传递 false 来删除其默认范围

返回

Promise<数字>

public async create(sourceInstance: Model, values: 对象, options: 对象): Promise source

创建关联模型的新实例并将其与之关联。

参数

名称类型属性描述
sourceInstance Model

源实例

object
  • 可选

目标模型的值

options object
  • 可选

传递给创建和添加的选项

options.through object
  • 可选

连接表的附加属性

返回

Promise

public async get(instance: Model, options: 对象): Promise<数组<Model>> source

使用可选的 where 子句,获取当前与之关联的所有内容。

参数

名称类型属性描述
instance Model

instance

options object
  • 可选

查找选项

options.where object
  • 可选

可选的 where 子句,用于限制关联的模型

options.scope 字符串 | 布尔值
  • 可选

在相关模型上应用范围,或通过传递 false 来删除其默认范围

options.schema 字符串
  • 可选

在相关模型上应用模式

options.through.where object
  • 可选

应用于通过模型(连接表)的可选 where 子句

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

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

返回

Promise<数组<Model>>

参见

  • Model 有关选项的完整解释

public async has(sourceInstance: Model, instances: Model | Model[] | 字符串[] | 字符串 | 数字[] | 数字, options: 对象): Promise<布尔值> source

检查一个或多个实例是否与 this 关联。如果传递了一个实例列表,则如果所有实例都关联,则该函数返回 true

参数

名称类型属性描述
sourceInstance Model

要检查关联的源实例

实例 Model | Model[] | string[] | string | number[] | number
  • 可选

可以是实例或其主键的数组

options object
  • 可选

传递给 getAssociations 的选项

返回

Promise<布尔值>

public remove(sourceInstance: Model, oldAssociatedObjects: Model | Model[] | 字符串 | 字符串[] | 数字 | 数字[], options: 对象): Promise source

取消关联一个或多个实例。

参数

名称类型属性描述
sourceInstance Model

将实例与实例取消关联

oldAssociatedObjects Model | Model[] | 字符串 | 字符串[] | 数字 | 数字[]
  • 可选

可以是实例或其主键,或者实例和主键的混合数组

options object
  • 可选

传递给 through.destroy 的选项

返回

Promise

public async set(sourceInstance: Model, newAssociatedObjects: Model | Model[] | 字符串[] | 字符串 | 数字[] | 数字, options: 对象): Promise source

通过传递实例或其主键的数组来设置关联的模型。传递的数组中不存在的任何内容将取消关联。

参数

名称类型属性描述
sourceInstance Model

要与新实例关联的源实例

newAssociatedObjects Model | Model[] | string[] | string | number[] | number
  • 可选

单个实例或主键,或持久化实例或主键的混合数组

options object
  • 可选

传递给 through.findAll、bulkCreate、update 和 destroy 的选项

options.validate object
  • 可选

为连接模型运行验证

options.through object
  • 可选

连接表的附加属性。

返回

Promise