多对多关联
继承
通过连接表实现的多对多关联。
当连接表具有其他属性时,这些属性可以传递到 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 |
使用可选的 where 子句,计算当前与之关联的所有内容。 |
|
public |
创建关联模型的新实例并将其与之关联。 |
|
public |
使用可选的 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
中可能缺少的任何已关联的实例。
public async count(instance: Model, options: object): Promise<number> source
使用可选的 where 子句,计算当前与之关联的所有内容。
public async create(sourceInstance: Model, values: 对象, options: 对象): Promise source
创建关联模型的新实例并将其与之关联。
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,则仅从连接表中返回未删除的记录。如果为 false,则返回已删除和未删除的记录。仅当 through 模型是 paranoid 时适用 |
参见
- Model 有关选项的完整解释
public async has(sourceInstance: Model, instances: Model | Model[] | 字符串[] | 字符串 | 数字[] | 数字, options: 对象): Promise<布尔值> source
检查一个或多个实例是否与 this 关联。如果传递了一个实例列表,则如果所有实例都关联,则该函数返回 true
public remove(sourceInstance: Model, oldAssociatedObjects: Model | Model[] | 字符串 | 字符串[] | 数字 | 数字[], options: 对象): Promise source
取消关联一个或多个实例。