我已經耗盡了我在這裏和其他地方找到的所有內容。看起來其他人正在取得成功,但我所做的任何事情都不會讓我看到任何虛擬領域。我已經嘗試了作爲領域和getterMethods無濟於事。我確定我的項目中安裝了最新的Sequelize版本。無法讓虛擬字段在Sequelize中工作
這裏是對象的定義:
var Orderitem = sequelize.define("Orderitem", {
description: { type: DataTypes.STRING(80), allowNull: false },
quantity: { type: DataTypes.DECIMAL(9,2), allowNull: false, defaultValue: 0},
unitWeight: { type: DataTypes.DECIMAL(9,2), allowNull: false, defaultValue: 0},
price: { type: DataTypes.DECIMAL(9,2), allowNull: false, defaultValue: 0},
totalPrice: {
type: DataTypes.VIRTUAL(DataTypes.DECIMAL(9,2), ['price', 'quantity']),
get() {
//return this.getDataValue('unitWeight') * this.getDataValue('quantity');
return 195.99;
}
},
totalWeight: {
type: DataTypes.VIRTUAL(DataTypes.DECIMAL(9,2), ['unitWeight', 'quantity']),
get() {
//return this.getDataValue('unitWeight') * this.getDataValue('quantity');
return 45;
}
},
}, {
/*
getterMethods: {
testFoo: function() {
return 'Foo';
},
totalPrice: function() {
return this.getDataValue('price') * this.getDataValue('quantity');
},
totalWeight: function() {
return this.getDataValue('unitWeight') * this.getDataValue('quantity');
}
},
*/
classMethods: {
associate: function(models) {
Orderitem.belongsTo(models.Order, {onDelete: 'CASCADE'})
}
}
由於所報,它試圖使用屬性定義與虛擬類型。我也試過只是虛擬,沒有其他類型或依賴關係。爲了測試,我還對示例返回值進行了硬編碼。
使用getterMethods(註釋掉)票價的替代方案不會更好。根據我所能找到的一切,我應該能夠執行find(findOne,findAll等),這些應該作爲字段與所有其他字段一起返回。前4個字段從數據庫返回預期值。虛擬領域無處可尋。使用上述兩種方法,我做錯了什麼?
檢索代碼:
OrderController.items = function (orderId, callback) {
models.Orderitem.findAll({
//attributes: Object.keys(models.Orderitem.attributes).concat([ 'totalPrice','totalWeight']),
where: {orderId: orderId}, raw: true
}).then(function(orderitems) {
callback(null, orderitems)
}).catch(function(error) {
callback(error, null)
});
};
有沒有錯誤,如預期檢索的項目,一切完美*除了虛擬領域。他們根本不在那裏被發現。請求原始或完整對象沒有區別。
似乎爲我工作,你也可以粘貼你的檢索代碼? – drinchev
向原始文章添加檢索代碼 - 似乎無法在評論中很好地格式化它。 –
挖掘整個返回的對象(關閉原始數據)我在以下位置找到對我的虛擬字段的引用: orderlines [0] .__ proto__ 在此屬性屬性是一個包含我的虛擬字段的名稱數組,是每個屬性的字段 - 所有都是未定義的*除了我的虛擬字段的值,我的硬編碼值分別高於 - 199.95和45。 原始設置爲true,這不會通過。測試更多我也看到這些將保持未定義,如果作爲他們需要的兩個其他領域的產品。 –