首页 > 解决方案 > 当从多对多关系调用时,Sequelize 正在以复数形式搜索表

问题描述

我的 'House' 表是单数形式,我想使用多对多关系获取数据,但 sequelize 将 'House' 表视为 'Houses' 并且无法获取结果(即 [])这样调用,

db.V1_DB.models.Users.findAll(
        include: [
            {
                model: db.V1_DB.models.House,
            }
        ]
    }).then(response => {
        console.log(response)
    }
    ).catch((ex) => {
        console.log("Error is here: ", ex)
    })

但是成功获取了House with Users的结果,

db.V1_DB.models.House.findAll(
        include: [
            {
                model: db.V1_DB.models.Users,
            }
        ]
    }).then(response => {
        console.log(response)
    }
    ).catch((ex) => {
        console.log("Error is here: ", ex)
    })

我已经添加了freezeTableName: true

我的模型是这样的。

'use strict';

const { Model } = require("sequelize");
module.exports = (sequelize, DataTypes) => {
  class House extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
      House.belongsToMany(models.Users, {
          through: "Users_Has_House",
          foreignKey: "Users_fk",
      });
    }
  }
  House.init({
    name: DataTypes.STRING,
  }, {
    sequelize,
    modelName: 'House',
    freezeTableName: true,
    
    name: {
      singular: "House",
      plural: "House"
  }
  });
  return House;
};
'use strict';
const {
    Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
    class Users extends Model {
        //No Associations

        static associate(models) {
            // define association here

            Users.belongsToMany(models.House, {
                through: "Users_Has_House",
                foreignKey: "House_fk",
            });
        }
    };
    Users.init({
        Bio: DataTypes.TEXT,
    }, {
        sequelize,
        modelName: 'Users',
    });
    return Users;
};

标签: mysqlnode.jssequelize.jsmany-to-manysequelize-cli

解决方案


您需要更正关联,因为选项应该指示我们正在调用foreignKey其方法的模型,并且应该指示作为第一个参数传递给的模型:belongToManyotherKeybelongToMany

House.belongsToMany(models.Users, {
          through: "Users_Has_House",
          foreignKey: "House_fk",
          otherKey: "Users_fk"
      });
Users.belongsToMany(models.House, {
                through: "Users_Has_House",
                foreignKey: "Users_fk",
                otherKey: "House_fk"
            });

推荐阅读