.MasMany вызывается с чем-то, что не является подклассом Sequelize.Model - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь сослаться на внешний ключ между двумя моделями.но я получаю эту ошибку:

throw new Error(this.name + '.hasMany called with something that\'s not a subclass of Sequelize.Model'); ^

Ошибка: user_relation.hasMany вызван с чем-то, что не является подклассом Sequelize.Model

squelize.js

const Sequelize = require('sequelize');
const config = require('./default.config')
const sequelize = new Sequelize(config.database, config.user, config.password, {
  host: config.host,
  port: config.port,
  dialect: 'mysql',
  timezone: config.timezone,//东八区
  pool: {
    max: 5,
    min: 0,
    acquire: 30000,
    idle: 10000
  }
});

sequelize
  .sync()
  .then(err => {
    console.log('Connection has been established successfully.');
  })
  .catch(err => {
    console.error('Unable to connect to the database:', err);
  });

module.exports = sequelize;

Модель пользователя

const sequelize = require ('sequelize');const Model = require ('../../ config / squelize');

const Admin = Model.define('admin', {
  username : {type : sequelize.STRING, allowNull : false},//用户名
  password : {type : sequelize.STRING, allowNull : false},//密码
  details : {type : sequelize.STRING, allowNull : true},//简介
  head_thumb : {type : sequelize.STRING, allowNull : true},//头像
  gender : {type : sequelize.STRING, allowNull : true},//性别
  nickname : {type : sequelize.STRING, allowNull : true},//昵称
  userid : {type : sequelize.INTEGER, autoIncrement : true, primaryKey : true}//用户userid
}, {
  freezeTableName:true
})

module.exports = Admin;

admin_relation.js

var Sequelize = require('sequelize');
const Model = require('../../config/squelize');
const Admin = require('./admin.model')

var user_relation = Model.define('user_relation', {
    id : {type : Sequelize.INTEGER, autoIncrement : true, primaryKey : true},
    userid : {type : Sequelize.STRING, allowNull : false},//用户id
    frendid : {type : Sequelize.STRING, allowNull : false}//朋友id
},{
    timestamps:false,
    freezeTableName:true,
});
user_relation.hasMany(Admin,{as:'admin',foreignKey:'userid'})

module.exports = user_relation;

Кто-то уже виделошибка, которая выглядит так?Я ищу несколько дней без каких-либо проблем, если кто-то может помочь, я буду очень признателен,

спасибо!

Ответы [ 2 ]

0 голосов
/ 21 апреля 2019

Если это сценарий «многие ко многим», лучше создать новую модель, и в этой модели вы можете добавить взаимосвязь.В противном случае, поместите отношение в одну сторону.

Admin.belongsTo(User);

, а также в сторону администратора вы можете поставить

User.hasMany(Admin);
0 голосов
/ 31 мая 2018

Я думаю, что вы пытаетесь сохранить внешний ключ в модели user_relation для ключа userid в модели Admin.Если это так, вы должны определить sourceKey и targetKey в ассоциации.

Определить sourceKey и targetKey с одинаковым типом данных.

В модели администратора

Admin.belongsTo(user_relation, {
    foreignKey: 'userid',
    targetKey: 'userid'
});

В модели user_relation

user_relation.hasMany(Admin, {
    as: 'admin',
    foreignKey: 'userid',
    sourceKey: 'userid'
});
...