在模型函数中重新定义访问关系

时间:2017-01-29 13:44:22

标签: node.js sequelize.js models eager-loading

我的数据库中有两个表" modules"和#34; composants"。模块可以有很多合成器,并且有一个int属性" prix"。我想创建一个伪属性" prix"添加所有属性的模块" prix"其作曲家。如何在创建伪属性的函数内访问关联的合成器?

module.exports = function (sequelize, DataTypes) {
    "use strict";
    var module = sequelize.define('module', {
        id_module: {
            type: DataTypes.INTEGER.UNSIGNED,
            autoIncrement: true,
            primaryKey: true
        },
        nom: {
            type: DataTypes.STRING,
            allowNull: false
        },
        coupe: {
            type: DataTypes.STRING,
            allowNull: false
        },
        gamme: {
            type: DataTypes.STRING,
            allowNull: false
        },
        prix: {
            type     : DataTypes.INTEGER.UNSIGNED,
            allowNull: false,
            get      : function(models)  {
                var prix;
                console.log(this);
                return prix;
            }
        }
    }, {
        classMethods: {
            associate: function(models) {
                module.hasMany(models.caracteristique_module,{
                    hooks: true,
                    onDelete: 'cascade',
                    foreignKey: "id_caracteristique"
                });
                module.hasMany(models.composant, {
                    through: models.composition,
                    hooks: true,
                    onDelete: 'cascade',
                    foreignKey: "id_composant"
                })
            }
        },
        timestamps: false,
        tableName: 'modules'
    });
    return module;
};

1 个答案:

答案 0 :(得分:0)

找到了解决方案。 在模型中

prix: {
            type     : DataTypes.INTEGER.UNSIGNED,
            allowNull: false,
            get      : function()  {
                var prix = 0;
                if(this.composants != undefined){
                    this.composants.forEach(function(composants){
                        prix += parseInt(composants.prix);
                    });
                }
                return prix;
            }
        }