教程 > sequelize 中文教程 > 阅读:70

sequelize 创建关联——迹忆客-ag捕鱼王app官网

只要所有元素都是新元素,就可以一步创建带有嵌套关联的实例。

相反,无法执行涉及嵌套对象的更新和删除。 为此,你将必须明确执行每个单独的操作。

belongsto / hasmany / hasone 关联

考虑以下模型:

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 关联的复数形式。


一个别名 belongsto 关联

可以扩展前面的示例以支持关联别名.

const creator = product.belongsto(user, { as: 'creator' });
return product.create({
  title: 'chair',
  creator: {
    firstname: 'matt',
    lastname: 'hansen'
  }
}, {
  include: [ creator ]
});

hasmany / belongstomany 关联

让我们介绍将产品与许多标签关联的功能。 设置模型如下所示:

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'
  }]
})

查看笔记

扫码一下
查看教程更方便
网站地图