如何使用Sequelize插入/查找来自不同表的外键相关的行?

时间:2018-05-17 17:14:03

标签: mysql node.js sequelize.js

我想我已经对这个问题做了足够的研究,我只是头疼。

以下是我已经完成并理解的内容:我重构了我的MySQL数据库,以便将用户的数据保存在不同的表中,我使用的是外键。到目前为止,我只得出结论外键仅用于一致性和控制,并且它们不会自动化或执行任何其他操作(例如,在两个表中插入有关同一用户的数据我需要使用两个单独的插入语句和外键无助于以某种方式使其不同或自动化。

精细。这就是我想要做的事情:我想使用Sequelize一次性从所有相关表中插入,更新和检索数据,我完全不知道如何做到这一点。例如,如果用户注册,我希望能够在包含一些用户信息的表“A”中插入数据,并在表B中的同一任务中插入一些其他数据(如用户在专用表中的设置或随你)。与检索相同,我希望能够获得一个对象(或数组),其中包含符合我想要查找的条件的不同表中的所有相关数据。

Sequelize文档涵盖了所有东西依赖于前一个东西的方式,而Sequelize非常臃肿,有很多我不需要的东西。我不想使用.sync()。我不想使用迁移。我已经创建了我的数据库结构,我想要Sequelize附加到它。

是否可以同时插入和检索多个相关的行并获取/使用单个Sequelize命令/对象?怎么样?

同样,“相关数据”是指通过共享相同的外键来“链接”的数据。

1 个答案:

答案 0 :(得分:0)

  

是否可以插入和检索相同的多个行   时间和获取/使用单个Sequelize命令/对象?怎么样?

是。你需要的是eager loading

请看以下示例

const User = sequelize.define('user', {
  username: Sequelize.STRING,
});

const Address = sequelize.define('add', {
  address: Sequelize.STRING,
});

const Designation = sequelize.define('designation', {
  designation: Sequelize.STRING,
});

User.hasOne(Address);
User.hasMany(Designation);

sequelize.sync({ force: true })
  .then(() => User.create({
    username: 'test123',
    add: {
      address: 'this is dummy address'
    },
    designations: [
      { designation: 'designation1' },
      { designation: 'designation2' },
    ],
  }, { include: [Address, Designation] }))
  .then(user => {
    User.findAll({
      include: [Address, Designation],
    }).then((result) => {
      console.log(result);
    });
  });

console.log中,您将获得要包含在查询中的所有相关模型的所有数据