私はここや他の場所で見つけられたすべてを使い果たしました。他の人が成功しているように見えますが、私が何もしていなければ、仮想フィールドを見ることはできません。フィールドと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'})
}
}
引用されたとして、VIRTUALタイプと属性の定義を使用しようとしています。私もで試してみたところ、仮想で、追加のタイプや依存関係はありません。テストのために、サンプル戻り値もハードコーディングしました。
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
オリジナルの投稿に検索コードを追加しました。コメントにうまく書式を設定する方法がないようです。 –
返されたオブジェクト全体を掘り下げる(rawをオフにしている)私の仮想フィールドへの参照は、 オーダーライン[0] .__ proto__ にあります。その属性プロパティは、自分の仮想フィールドを含む名前の配列です。すべての属性のフィールドです - すべては未定義です*上記のハード・フィールドの値は199.95と45です。 rawをtrueに設定すると、これは処理されません。さらにテストする必要があるので、他の2つのフィールドの製品にすると、これらは未定義のままです。 –