【发布时间】: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