简体   繁体   English

续集–多对多关联

[英]Sequelize – many to many associations

I have two models defined: 我定义了两个模型:

db/models/User.js 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 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;
};

I want to create many-to-many association between then (so a group can have many users, and a user can belong to many groups. Here is my db/index.js : 我想在那时之间建立多对多关联(这样一个组可以有许多用户,并且一个用户可以属于多个组。这是我的db/index.js

db/index.js db / 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,
};

When I do User.findAll() , there is no groups attribute returned in the object. 当我执行User.findAll() ,对象中没有返回groups属性。 How should I properly set up many-to-many relationship here? 我应该如何在这里正确建立多对多关系?

User.findAll() will return it associated models by defaults, you need to use include like this : User.findAll()会默认返回与之相关的模型,您需要使用include例如:

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

SIMPLE GUIDE 简单指南

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM