Cześć!
Do zarządzania bazą danych używam sequelize js i mam tabelkę która ma relację sama do siebie. Model i migracja wyglądają następująco:
Model:
module.exports = (sequelize, DataTypes) => {
const Category = sequelize.define('Category', {
name: DataTypes.STRING,
description: DataTypes.STRING,
imageUrl: DataTypes.STRING,
parentId: DataTypes.INTEGER
}, {});
Category.associate = function (models) {
Category.belongsTo(models.Category, {foreignKey: 'parentId', as: 'parent'})
Category.hasMany(models.Category, {as: 'children', foreignKey: 'parentId'})
};
return Category;
};
Migracja:
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('Categories', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
name: {
type: Sequelize.STRING
},
description: {
type: Sequelize.STRING
},
imageUrl: {
type: Sequelize.STRING
},
parentId: {
type: Sequelize.INTEGER,
allowNull: true,
references: {
model: 'Categories',
key: 'id'
}
},
createdAt: {
allowNull: false,
type: Sequelize.DATE
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('Categories');
}
};
I jeżeli chcę pobrać wszystkie główne kategorię i wszystkie podkategorię to wykonuję:
models.Category.findAll({
where: {parentId: null},
include: "children"
}).then(categories => {
res.status(200).json({
categories
});
});
I działa ale pobiera podkategorię tylko i wyłącznie do jednego stopnia zagłębienia. A co jeżeli chcę pobrać kategorie z wszystkimi podkategoriami? Identyczna sytuacja jeżeli pobiorę z bazy kategorię o danym id i będę chciał uzyskać wszystkie kategorie w których zawiera się dana kategoria. Czy ktoś się z czymś takim spotkał?