gpt4 book ai didi

node.js - 使用 ES6 和默认创建的模型关联(模型与模型无关)

转载 作者:行者123 更新时间:2023-12-03 22:32:38 24 4
gpt4 key购买 nike

我在做什么?
我正在尝试使用 CLI 默认创建的模型将关联添加到我的文件夹模型。
重要的一点是,我试图将模型与他自己联系起来,所以 Folder.hasMany.Folder
我想达到什么目的?
我的期望是,当我使用这个查询时:

const folders = Folder.findAll({where:{parent_id: null}, include: [{model: Folder, as: 'children'}]});
我应该在 children 属性下获取带有 child 的文件夹结构。
但不是这样,我不断收到错误“ Folder(model) is not associated to Folder(model)
这是我的文件夹模型的代码:
'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;

最佳答案

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

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 - 哇,关联以正确的方式工作。

关于node.js - 使用 ES6 和默认创建的模型关联(模型与模型无关),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65493573/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com