2016-07-31 11 views
0

2つのテーブル(製品とサービス)が、product_serviceというコストの列を持つ結合テーブルによって接続された多対多の関係を持っています。作成したサービスにサービスを追加しようとすると、データベースが更新されても、最初の呼び出しでは更新された値が返されません。チェックすると知っているので、自分のアプリケーションで更新された値を確認するだけです別の呼び出し。NodeJS Sequelize:アソシエーションの設定値に関する問題

var query = { 
    where: { 
     id: req.params.id 
    }, 
    include: defaultIncludes() 
    } 
    models.products.findOne(query) 
    .then(function (product) { 
    if (!product) { 
     return res.status(404).json({message: 'Product not found' }); 
    } else { 
     this.product = product; 
     return models.services.findById(req.body.service_id); 
    } 
    }) 
    .then(function (service) { 
    return this.product.addServices(service); 
    }) 
    .then(function (result) { 
    return this.product.save(); 
    // return models.products.findOne(query); 
    }) 
    .then(function (product) { 
    return res.status(200).json(product) 
    }) 
    .catch(function (err) { 
    logger.error(err); 
    return res.status(500).json({error: err.message}); 
    }); 

私はそれがaddServicesまたはsave関数のいずれかと約束しているかもしれないと思うが、それを理解できないようだ。

答えて

1

product.addServices(service)の後に最初にproduct.save()に電話する必要はありません。次に、この2つの関数は、更新されたインスタンスをコールバック関数の最初のパラメータとして渡しません。

... 
.then(function (service) { 
    return this.product.addServices(service); 
}) 
.then(function() { 
    return res.status(200).json(this.product) 
}) 
.catch(function (err) { 
    logger.error(err); 
    return res.status(500).json({error: err.message}); 
}); 

だから、あなたのケースであなただけの次の操作を行うことができます

関連する問題