在sails waterline orm

时间:2016-01-13 15:16:43

标签: mysql sails.js waterline

我正在开发一个包含多个(> 2)表格的sails应用程序,我需要在填充方法的帮助下加入这些表格 e.g。

Category.js模型

attributes: {
    CategoryID:{
        type:"integer",
        required:true,
        primaryKey:true,
        autoIncrement:true
    },
    SubCategories:{                  //REFERING TO SUB-CATEGORY TABLE
        collection:'SubCategory',
        via:'CategoryID'
    },
    CategoryName:{
        type:"string",
        required:true,
        maxLength:50
    }
  }

这是 SubCategory.js模型

attributes: {
    id:{
        type:'integer',
        required:true,
        primaryKey:true,
        autoIncrement:true,
        maxLength:10,
        columnName:'SubCategoryID'
    },
    CategoryID:{
        model:'Category'                 //REFERING TO CATEGORY TABLE
    },
    ProductsOfCategory:{                  //REFERING TO PRODUCT TABLE
        collection:'Product',
        via:'SubCategoryID'
    },
    SubCategory:{
        type:"string",
        required:true,
        maxLength:50
    }
}

Product.js模型

attributes: {
    id: {
        type: 'integer',
        primaryKey: true,
        autoIncrement: true,
        maxLength: 10,
        columnName:'ProductID'
    },
    SubCategoryID: {
        model:'SubCategory'
    },
    ProductDetails:{
        collection:'ProductDetails',
        via:'ProductID'
    },
    ProductName: {
        type: "string",
        required: true,
        maxLength: 50
    }
}

ProductDeatils.js模型

attributes: {
    id: {
        type: 'integer',
        primaryKey: true,
        autoIncrement: true,
        maxLength: 10,
        columnName:'ProductDetailID'
    },
    ProductID:{
        model:'Product'
    },
    Size:{
        type:"string",
        required:true,
        maxLength:10
    },
    Color:{
        type:"string",
        required:true,
        maxLength:10
    }
}

在填充时,我可以填充每个类别的类别和子类别。

Category.find()
        .populate('SubCategories')
        .exec(function(err, categories){
            if (err) {
                console.log(err);
                return res.json(err);
            }
            console.log(categories);
            res.json(categories);
        })

如何一次性填充上面的所有表格,以便在最终查询后我们在一个json中获得所有上述详细信息。

我们加入了以上所有表格

这是包含所有子类别的类别,包含所有产品的子类别和所有产品在一个json中都有产品详细信息

1 个答案:

答案 0 :(得分:1)

你问了一个很好的问题。将嵌套填充功能纳入风帆,几十个问题请求和PR等等,一直有大量兴趣。

在这里看看一些历史:

[FEATURE REQUEST] Recursively populate #308 - 我迟到了,在2014年10月29日提出请求,就像你在历史上看到的一样。

据我所知,大多数会话最终融合在这里(在Sails用户请求该功能几年后):

Deep populate #1052(问题仍然是开放撰写 2016年1月14日

我们不清楚该问题的状态。这两个链接的历史确实提出了其他人使用的替代解决方法。

我的预感是不支持递归填充。

使用水线模型与SailsJS关联时所做的是使用类似async.js的包 - 使用类似瀑布的方式以编程方式显式填充子关系。您可以将此操作与覆盖您调用的模型的默认toJSON()组合在一起,以将其关系(以编程方式填充)添加到JSON响应中。你也可以选择使用内置的promises来实现同样的目标。

发现这个(日期为2014年)SOF Question,提供了更多信息。

有人,如果我在最近的Sails或Waterline版本中错过了这个功能,那么请在这里纠正我 - 无法在发布说明中找到任何项目的任何内容,说这是支持的。