この最初の解決策が見つかった場合、解決策はほとんどありませんが、より複雑ですが、パフォーマンスが向上します:
これは、MySQLIのガイドのように階層データ構造を実装することについてです
http://mikehillyer.com/articles/managing-hierarchical-data- in-mysql /
入れ子集合モデルという名前のモデル。
私が実際に自分で実装した2番目のソリューションは再帰的拡張です。これは多くのmysqlリクエストを使用し、改善できると思いますが、高速でうまく機能します。事はこのような各カテゴリ関数に使用することです
var expandSubcategories = function (category) {
return new promise(function (resolve, reject) {
category.getSubcategories().then(function (subcategories) {
//if has subcategories expand recursively inner subcategories
if (subcategories && subcategories.length > 0) {
var expandPromises = [];
_.each(subcategories, function (subcategory) {
expandPromises.push(expandSubcategories(subcategory));
});
promise.all(expandPromises).then(function (expandedCategories) {
category.subcategories = [];
_.each(expandedCategories, function (expandedCategory) {
category.subcategories.push(expandedCategory);
}, this);
//return self with expanded inner
resolve(category);
});
} else {
//if has no subcategories return self
resolve(category);
}
});
});
};
したがって、カテゴリを調べて再帰的に拡張します。
多分これは誰かにも役立つでしょう。