Sequelize hasMany работает нормально, но обратное отношение не работает - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь работать с mysql отношениями в Node Js (express Js), используя Sequelize.

User.hasMany(Post); работает просто отлично, но когда я пытаюсь инвертировать его в Посте модель, подобная: Post.belongsTo(User);

получила эту ошибку: выбросить новую ошибку ($ {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;

Как я могу решить эту проблему? Спасибо всем ...

1 Ответ

1 голос
/ 19 апреля 2020

Вы должны исправить экспорт определений моделей как функции и определить ассоциировать функцию в каждой функции определения модели, как это, и вызывать ее все после того, как все модели зарегистрированы в каком-либо модуле, таком как база данных. 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)
  }

...