Sails JS — глубокое заполнение той же модели и атрибута

Позвольте мне объяснить это немного. Идея состоит в том, чтобы иметь категории, и каждая категория может иметь родительскую категорию и подкатегорию, но мы не знаем, насколько глубоко может идти это дерево. Например:

->Clothes
-->Men
--->Kids
---->Newborns
----->Etc, etc
-->Women
-->Unisex

Поэтому я подумал, что моя модель Category.js может иметь следующие атрибуты:

module.exports = {
  attributes: {
    name: {
      type: 'string',
      required: true,
      unique: true
    },
    products: {
      collection: 'product',
      via: 'category'
    },
    parentCategory: {
      model: 'category'
    },
    subCategories: {
      collection: 'category',
      via: 'parentCategory'
    }
  }
};

И когда я получу все свои категории:

Category.find({}).populate('subCategories').exec(........

Я получаю список всех категорий и их подкатегорий, но я также хочу иметь подкатегории подкатегорий, точно так же, как древовидная иерархия, которую я написал ранее, но вместо этого я получаю

Одежда { подкатегории: [мужчины:{}, женщины:{}, унисекс:{}] } мужчины { .....

Но внутри Одежды у меня есть Мужчины, это верно. Но теперь внутри этого объекта «Мужчины» у меня нет «Детей».

Я ясно выражаюсь?


person Agustín    schedule 07.07.2016    source источник


Ответы (1)


Метод заполнения работает только на одном уровне (на данный момент), поэтому вы не можете заполнять и возражать, а затем заполнять другой внутри. У меня была аналогичная функция, и я нашел и написал этот код, может быть, он вам поможет:

  return Object.findOne({
        id: id
      }).populateAll().then(function (result) {
         var otherObject= otherObject.find(result.id).then(function (otherResult) {
           return otherResult;
         });
         return [result, otherResult];
      }).spread(function (house, otherResult) {
         result= result.toObject();
         result.otherResult= otherResult;
         return result;
      });
person Daniel    schedule 12.07.2016