首页 > 解决方案 > 如何使用 Sequelize 从不同的表中插入/查找由外键相关的行?

问题描述

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

这是我所做和理解的:我已经重组了我的 MySQL 数据库,以便我将用户的数据保存在不同的表中,我正在使用外键。到目前为止,我只得出结论,外键仅用于一致性和控制,它们不会自动化或做任何其他事情(例如,要在两个表中插入关于同一用户的数据,我需要使用两个单独的插入语句和外键无助于以某种方式使其不同或自动)。

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

Sequelize 文档以一种每件事都依赖于前一个的方式涵盖了所有内容,而 Sequelize 相当臃肿,包含很多我不需要的东西。我不想使用 .sync()。我不想使用迁移。我已经创建了我的数据库的结构,我希望 Sequelize 附加到它。

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

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

标签: mysqlnode.jssequelize.js

解决方案


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

是的。你需要的是急切的加载

看下面的例子

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);
    });
  });

In console.log, you will get all the data with all its associated models that you want to include in the query


推荐阅读