我正在为我的项目使用sequelize,并尝试在两个模型之间创建简单的关联。
用户型号:
const { DataTypes } = require('sequelize');
import db from '../db';
const UserModel = db.define('user', {
id: {
type: DataTypes.STRING,
unique: true,
primaryKey: true,
allowNull: false
},
email: {
type: DataTypes.STRING,
allowNull: true,
unique: true
},
...
});
export default UserModel;
会话模型
const { DataTypes } = require('sequelize');
import db from '../db';
const SessionModel = db.define('session', {
id: {
type: DataTypes.STRING,
unique: true,
allowNull: false,
primaryKey: true
},
userId: {
type: DataTypes.STRING,
allowNull: false,
references: {
model: 'users',
key: 'id'
}
},
expiresAt: {
type: DataTypes.DATE,
allowNull: false
}
});
export default SessionModel;
我有一个迁移脚本,这是我定义关联的方式
require('dotenv').config({ path: '../.env' });
const { DataTypes } = require('sequelize');
import db from '../db';
// Models
import SessionModel from '../models/session';
import UserModel from '../models/user';
/**
* Associations.
*/
// Session - User association
UserModel.hasMany(SessionModel, { foreignKey: 'userId', type: DataTypes.STRING });
SessionModel.belongsTo(UserModel, { foreignKey: 'userId', type: DataTypes.STRING });
/**
* Sync the database.
*/
const start = async () => {
await db.sync({ force: true });
};
if (process.env.START && require.main === module) {
start()
.then(() => {
console.info('DONE ✨');
})
.catch((err) => {
console.error('ERROR 💥', err);
});
}
然后我尝试使用这样的会话检索用户数据
const users = await UserModel.findAll({
where: whereCondition,
include: [SessionModel]
});
错误消息是 “会话未与用户关联!”
续集版本是
"sequelize": "^6.35.1"
您的关联似乎设置正确,问题可能来自您引用模型的方式,特别是在下面的代码中:
userId: {
type: DataTypes.STRING,
allowNull: false,
references: {
**model: 'users'**, <------ this should be referenced as user
key: 'id'
}
},