Sequelize hasMany工作正常,但反比关系不正常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sequelize hasMany工作正常,但反比关系不正常相关的知识,希望对你有一定的参考价值。

我试图在Node Js(express Js)中使用Sequelize来处理mysql关系。

User.hasMany(Post); 工作就好了,但当我试图反转它在Post模型一样。Post.belongsTo(User);

得到了这个错误。 throw new Error(${source.name}.${_.lowerFirst(Type.name)}调用的东西不是Sequelize.Model的子类)。

错误:post. belongsTo被调用的东西不是Sequelize.Model的子类。

用户模式喜欢。

const Sequelize = require('sequelize');
const db = require('../config/db');

const Post = require('./Post');

const User = db.define('user', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        notNull: true,
        primaryKey: true
    },
    name: {
        type: Sequelize.STRING,
        notNull: true
    },
    email: {
        type: Sequelize.STRING,
        notNull: true
    },
    password: {
        type: Sequelize.STRING,
        notNull: true
    }

});

User.hasMany(Post);

module.exports = User;

和帖子模式一样。

const Sequelize = require('sequelize');
const db = require('../config/db');

const User = require('./User');

const Post = db.define('post', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        notNull: true,
        primaryKey: true
    },

    title: {
        type: Sequelize.STRING,
        notNull: true
    },
    description: {
        type: Sequelize.TEXT,
        notNull: true
    },
    author: {
        type: Sequelize.STRING,
        notNull: true
    }
});

Post.belongsTo(User);

module.exports = Post;

如何解决这个问题? 谢谢大家...

答案

你应该纠正你的模型定义,导出为函数,并定义了 联想 在每个模型定义函数中,像这样的函数,当所有的模型都注册到某个模块(如数据库.js)后,再全部调用它。

user. js

module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('user', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        notNull: true,
        primaryKey: true
    },
   ...

  User.associate = function (models) {
    User.hasMany(models.Post)
  }

post.js

module.exports = (sequelize, DataTypes) => {
  const Post = sequelize.define('post', {
    id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        notNull: true,
        primaryKey: true
    },
  ...
  Post.associate = function (models) {
    Post.belongsTo(models.User)
  }

以上是关于Sequelize hasMany工作正常,但反比关系不正常的主要内容,如果未能解决你的问题,请参考以下文章

Sequelize hasMany 失败

Sequelize.hasMany/belongsTo中的foreignKey是啥意思?

sequelize/sequelize-typescript - 带有 HasMany 的 findAll 返回一个对象而不是数组

Sequelize hasMany 通过另一个表

model.hasMany 调用的东西不是 Sequelize.Model 的子类

在hasmany的续集中与计数