mysql - 当从多对多关系调用时,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;
};
解决方案
您需要更正关联,因为选项应该指示我们正在调用foreignKey
其方法的模型,并且应该指示作为第一个参数传递给的模型:belongToMany
otherKey
belongToMany
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"
});
推荐阅读
- r - 如何使用过滤器功能制作 for 循环?
- vue.js - 仅在 Vue 或 Nuxt 项目中为 SEO 预渲染某些页面
- javascript - 将 `babel-register` 更新为 `@babel/register` 后修改 `babel-register server.js`
- sql-server - 确认 EndDialog 时启动器从未激活
- javascript - 动态创建 Chart.js 时折线图未设置 backgroundColor
- android - Android 意图以相反的顺序启动
- angular - 为什么当我尝试将它与 mat-checkbox 一起使用时,'$event.target.checked' 会给出角度 TypeError
- mysql - SQL - 有没有办法计算一系列日期的累计?
- arrays - Ruby:有没有更雄辩的方式来迭代有时可能是一对的项目?
- mysql - 连接两个列以查找重复项,然后选择最新日期