2016-11-01 3 views
1

私はthis質問を読んで、それは私を助ける」didntの、私は自分自身を求めている:sequelizeでthrough-NM属性を更新するにはどうすればよいですか?

はのは、私がSequelizeとMariaDBを使用してテーブルをNMによって接合された2つのテーブルを持っているとしましょう:

User <-- UserItem --> Item 

1人のユーザーは多くのアイテムを持つことができ、1つのアイテムは多くのユーザーに属することができます。しかし、アイテムの数量を格納するためにカスタムスルーアトリビュートが必要です。それをApplesという名前にしましょう。だから、docsによると、これが定義されます:

var UserItem = Sequelize.define('UserItem', { 
    quantity: DataTypes.INTEGER 
}, 
    timestamps: false 
}); 
models.Item.belongsToMany(models.User, {through: 'UserItem'}); 
models.User.belongsToMany(models.Item, {through: 'UserItem'}); 

そして、私はこのような属性を介して新しい関係を追加します。

User.addItem(item, { quantity: 0 }); 

予想通り、この作品。しかし、アイテムの数量を更新する必要がある場合はどうすればよいですか?私は以下を行うことができます:

User.addItem(item, { quantity: 20 }); 

そして、私のアイテムの数量は、既存の場合は20に更新され、それ以外の場合は挿入されます。私はこれを望んでいない。

User.addItem(item, { quantity: quantity + 1 }); 

しかしによる参加のテーブルへのクエリを作成することが不可能に

、私は前の値を使用して更新するための特定のNMの行を取得することができません:私はそのような何かをしたいです。

どうすればこの問題を解決できますか?前もって感謝します。

答えて

0

docsで指定されているように、まだ結合テーブルDAOがあります。

この場合、itemが新しい関連付けであるかどうかを知る必要がありますが、

だから、それは何かのように見えます。

User.hasItem(item) 
    .then(exists => { 

     if (!exists) { 
      return User.addItem(item, { quantity : 20 }) 
     } else { 
      item.UserItem.quantity += 1; 
      return item.UserItem.save(); 
     } 

    }) 

hasAssociation in the docsについてさらに読むことができます。

関連する問題