【问题标题】:Association using ES6 and default created Model (Model is not associated to Model)使用 ES6 和默认创建的模型关联(模型不关联到模型)
【发布时间】:2021-04-06 04:00:30
【问题描述】:

我在做什么?

我正在尝试使用 CLI 默认创建的模型向我的文件夹模型添加关联。 重要说明是我试图将模型与他自己关联,所以 Folder.hasMany.Folder

我想达到什么目的?

我的期望是当我使用这个查询时:

const folders = Folder.findAll({where:{parent_id: null}, include: [{model: Folder, as: 'children'}]});

我应该在 children 属性下获得包含子项的文件夹结构。

但我经常收到错误“文件夹(模型)与文件夹(模型)没有关联

这是我的文件夹模型的代码:

'use strict';
const { Sequelize, Model } = require('sequelize');

module.exports = (sequelize, DataTypes) => {
class Folder extends Model {
    static associate(models) {
        Folder.hasMany(models.Folder, {
            foreignKey: 'parent_id',
            as: 'children'
        });
        Folder.belongsTo(models.Folder, {
            foreignKey: 'parent_id',
            as: 'parent'
        });
    }
};
Folder.init({
    title: DataTypes.STRING,
    parent_id: { 
        type: DataTypes.INTEGER,
        references: {
            model: Folder,
            key: 'id',
            onDelete: 'cascade'
        }
    },
    user_id: { 
        type: DataTypes.INTEGER
    }
}, 
{
    timestamps: false,
    tableName: 'folders',
    sequelize,
    modelName: 'Folder',
});
    return Folder;
};

这是我与数据库的连接:

const Sequelize = require('sequelize');
const sequelize = new Sequelize('database_name', 'user', 'pass', {
    host: "localhost",
    dialect: "mysql",
    timezone: '+01:00' //Europe - Belgrade
});

sequelize
    .authenticate()
    .then(() => {
        console.log("Database connected successfully!");
    })
    .catch((error) => {
        console.log(error);
});

const models = {
  Folder: require('../models/Folder')(sequelize, Sequelize)
};
Object.values(models)
  .forEach(model => model.associate(models));

module.exports = sequelize;
global.sequelize = sequelize;

【问题讨论】:

    标签: node.js express sequelize.js associations model-associations


    【解决方案1】:

    如果有人更感兴趣,我解决了将连接文件更改为此的问题:

    const Sequelize = require('sequelize');
    const sequelize = new Sequelize('bookmarkwizard', 'root', 'root', {
        host: "localhost",
        dialect: "mysql",
        timezone: '+01:00' //Europe - Belgrade
    });
    
    sequelize
        .authenticate()
        .then(() => {
            console.log("Database connected successfully!");
        })
        .catch((error) => {
            console.log(error);
    });
    
    const models = require('../models/index');
    
    module.exports = {
        models,
        sequelize
    };
    global.sequelize = sequelize;
    global.models = models;
    

    本质是您应该需要 index.js(来自 Models 文件夹),因为该文件处理关联。我还将它导出为全局,并将模型调用为 models.ModelName - 哇,关联以正确的方式工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 2019-12-12
      • 2011-12-24
      • 2017-03-23
      相关资源
      最近更新 更多