返回模型和新插入的关系

时间:2016-05-02 03:47:28

标签: bluebird bookshelf.js

我有一个名为Category的模型和另一个名为Product的模型。 这两个模型之间存在关系:

// Category Model
var Category = bookshelf.Model.extend({
    tableName : 'categories',
    hasTimestamps : true,
    products : function () {
        return this.hasMany(Product, 'category_id');
    }
});

// Product model
var Product = bookshelf.Model.extend({

    tableName : 'products',

    hasTimestamps : true,

    category : function() {
        return this.belongsTo(Category, 'category_id');
    }
});

我尝试在通过交易给出documentation的示例后插入一个类别和3个产品。插入工作正常,但我无法返回所有插入的数据,包括产品(该类别可以,但我对新产品没有任何帮助)。

这是我的完整代码:

bookshelf.transaction(function(t){


    var products = req.body.products;
    var tableProd = [];


    //if (!req.params.idCategory || req.params.idCategory ==0) {
        return Category.forge({
                            name : req.body.name,
                            code : req.body.code,
                            tax_percentage : req.body.tax_percentage,
                            description  : req.body.description 
                            })
                            .save(null, {transacting : t})
                            .tap(function (category) {


                            for (var i=0; i < products.length; i++){

                            tableProd.push({
                                            barcode : products[i].barcode,
                                            cip : products[i].cip,
                                            category_id : category.id,
                                            quantity : products[i].quantity,
                                            retail_price : products[i].retail_price,
                                            description : products[i].description,
                                            name : products[i].name,
                                            DCI_name : products[i].DCI_name,
                                            kind : products[i].kind,
                                            comment : products[i].comment,
                                            status : products[i].status,
                                            critical_threshold : products[i].critical_threshold,
                                            max_threshold : products[i].max_threshold,
                                            date_end : products[i].date_end
                                            });
                                }

                                return Promise.map(tableProd, function (info) {
                                    Product.forge(info).save(null, {transacting : t})
                                })


                    });
                })
                .then(function (category) {
                    var result = category.related('products').pluck('category_id');
                    console.log('Category' +  JSON.stringify(category.toJSON()) + ' resultat: ' + JSON.stringify(result));
                    res.json({error : false, data : {category : category.toJSON()}})
                })
                .catch(function (err) {
                    console.log('Error msg : ' + err.message);
                })

这句话有什么问题: category.related('products').pluck('category_id')

如何插入所有数据:包括3种产品的类别?

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

这对我有用;

var ADDRESS = bookshelf.Model.extend({
tableName: 'ADDRESSES'});

var ADDRESSES = bookshelf.Collection.extend({
model: ADDRESS});

var addressArray = new Array();
for(var i=0; i<datas.length; i++) {
    addressArray.push({
        field1: datas[i].field1,
        ...
    });
}
var addressCollection = ADDRESSES.forge(addressArray);
addressCollection.invokeThen('save').then(function(addressResults) {
      console.log(addressResults);
});

您可以遍历addressResults并提取插入的ID。玩得开心:)

相关问题