【问题标题】:Sequelize – many to many associationsSequelize – 多对多关联
【发布时间】:2019-08-19 03:38:03
【问题描述】:

我定义了两个模型:

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

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

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

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    User.findAll() 默认返回关联模型,你需要像这样使用include

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

    SIMPLE GUIDE

    【讨论】:

    • 我收到一条错误消息,提示 "group is not associated to user!",
    • @Ancinek,表示您没有正确定义关联。
    • – 请查看上面的更新代码。我删除了自己的 id 并在定义它们时添加了 singularplural
    • 试试Models.User.hasMany(Models.Group);这个。
    • 如果您的关联正确,那么我的查询应该有效,请阅读:stackoverflow.com/questions/22958683/…
    猜你喜欢
    • 1970-01-01
    • 2014-04-15
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多