扫码一下
查看教程更方便
只要所有元素都是新元素,就可以一步创建带有嵌套关联的实例。
相反,无法执行涉及嵌套对象的更新和删除。 为此,你将必须明确执行每个单独的操作。
考虑以下模型:
class product extends model {}
product.init({
title: sequelize.string
}, { sequelize, modelname: 'product' });
class user extends model {}
user.init({
firstname: sequelize.string,
lastname: sequelize.string
}, { sequelize, modelname: 'user' });
class address extends model {}
address.init({
type: datatypes.string,
line1: sequelize.string,
line2: sequelize.string,
city: sequelize.string,
state: sequelize.string,
zip: sequelize.string,
}, { sequelize, modelname: 'address' });
// 我们保存关联设置调用的返回值,以便以后使用
product.user = product.belongsto(user);
user.addresses = user.hasmany(address);
// 也适用于 `hasone`
一个新的 product,user 和一个或多个 address 可以按以下步骤一步创建:
return product.create({
title: 'chair',
user: {
firstname: 'mick',
lastname: 'broadstone',
addresses: [{
type: 'home',
line1: '100 main st.',
city: 'austin',
state: 'tx',
zip: '78704'
}]
}
}, {
include: [{
association: product.user,
include: [ user.addresses ]
}]
});
观察 product.create
调用中 include 参数的用法。 这对于 sequelize 理解与关联一起创建的内容很有必要。
注意
:这里,我们的用户模型称为user,小写的u
-这意味着对象中的属性也应为user。 如果给 sequelize.define 的名称是user,则对象中的 key 也应该是user。 对于 addresses 也是如此,除了它是 hasmany 关联的复数形式。
可以扩展前面的示例以支持关联别名.
const creator = product.belongsto(user, { as: 'creator' });
return product.create({
title: 'chair',
creator: {
firstname: 'matt',
lastname: 'hansen'
}
}, {
include: [ creator ]
});
让我们介绍将产品与许多标签关联的功能。 设置模型如下所示:
class tag extends model {}
tag.init({
name: sequelize.string
}, { sequelize, modelname: 'tag' });
product.hasmany(tag);
// 也适用于 `belongstomany`.
现在,我们可以通过以下方式创建具有多个标签的产品:
product.create({
id: 1,
title: 'chair',
tags: [
{ name: 'alpha'},
{ name: 'beta'}
]
}, {
include: [ tag ]
})
并且,我们可以修改此示例以支持别名:
const categories = product.hasmany(tag, { as: 'categories' });
product.create({
id: 1,
title: 'chair',
categories: [
{ id: 1, name: 'alpha' },
{ id: 2, name: 'beta' }
]
}, {
include: [{
association: categories,
as: 'categories'
}]
})