无法与 Sequelize 创建关联

问题描述 投票:0回答:1

我正在为我的项目使用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"
mysql node.js orm sequelize.js
1个回答
0
投票

您的关联似乎设置正确,问题可能来自您引用模型的方式,特别是在下面的代码中:

  userId: {
    type: DataTypes.STRING,
    allowNull: false,
    references: {
      **model: 'users'**, <------ this should be referenced as user
      key: 'id'
    }
  },
© www.soinside.com 2019 - 2024. All rights reserved.