0

我定义了两个模型:

db/models/User.js

const Sequelize = require('sequelize');

module.exports = (sequelize, DataTypes) => {
  class User extends Sequelize.Model {}

  const config = {
    sequelize,
    modelName: 'user',
    underscored: true,
    paranoid: true,
  });

  User.init({
    first_name: {
      type: DataTypes.STRING,
    },
    last_name: {
      type: DataTypes.STRING,
    },
  }, config);

  return User;
};

db/models/Group.js

const Sequelize = require('sequelize');

module.exports = (sequelize, DataTypes) => {
  class Group extends Sequelize.Model {}

  const config = {
    sequelize,
    modelName: 'group',
    underscored: true,
    paranoid: true,
  });

  Group.init({
    name: {
      type: DataTypes.STRING,
      allowNull: false,
    },
  }, config);

  return Group;
};

我想在这之间创建多对多关联(所以一个组可以有很多用户,一个用户可以属于很多组。这是我的db/index.js

数据库/index.js

const Sequelize = require('sequelize');
const Logger = require('../config/logger');
const { DB } = require('../config/vars');
const UserModel = require('./models/User');
const GroupModel = require('./models/Group');

const sequelize = new Sequelize(
  DB.name,
  DB.username,
  DB.password,
  {
    host: DB.host,
    dialect: 'postgres',
  },
);

const Models = {
  User: UserModel(sequelize, Sequelize),
  Group: GroupModel(sequelize, Sequelize),
};

const setup = async () => {
  // Associations
  Models.User.belongsToMany(Models.Group, {
    through: 'UserGroups',
    as: { singular: 'group', plural: 'groups' },
  });
  Models.Group.belongsToMany(Models.User, {
    through: 'UserGroups',
    as: { singuler: 'user', plural: 'users' },
  });
  await sequelize.sync({ force: true });
};

module.exports = {
  ...Models,
  setup,
  Seeders,
  Sequelize,
  sequelize,
};

当我这样做User.findAll()时,对象中没有groups返回属性。我应该如何在这里正确设置多对多关系?

4

1 回答 1

0

User.findAll()默认情况下将返回它关联的模型,您需要include像这样使用:

User.findAll({
    include : {
        model : Groups 
    }
})

简单指南

于 2019-08-18T19:34:50.627 回答