3

User モデルと Course モデルがあり、それらは多対多の関係にあるため、基本的にユーザーは複数のコースに参加でき、コースには多くのユーザー (学生) がいます。結合テーブルがあり、結合テーブルに追加情報を追加しようとしています。基本的に、ユーザーには、コースごとに質問できる質問の毎月の割り当てがあります。そこで、User_Course 結合テーブルにクォータ列を追加しました。クォータ列にアクセスできません。以下は、アイデアを与えるための関連コードです。

var User = DB.Model.extend({
    Courses: function() {
        return this.belongsToMany('Course', 'User_Course', 'userId', 'courseId');
    },
});

var Course = DB.Model.extend({
    Users: function() {
        return this.belongsToMany('User', 'User_Course', 'courseId', 'userId');
    }
})

User_Course は、追加のクォータ列を持つ結合テーブルです。

**User_Course:**
userId: int
courseId: int
quota: int

割り当て値を減らすことができるようにしたいと考えています。updatePivot を使用して更新することはできますが、クォータ内の値を単純に取得することはできません。値を更新するために使用しているコードは次のとおりです。

var userPromise = new User.User({userId: userId}).fetch({withRelated: ['Courses']});
userPromise.then(function(_user) {
    _user.related('enrolledCourses').updatePivot({courseId:courseId, quota:1}).then(function() {
        return;
    })

})

ご覧のとおり、ここではクォータ値を毎回 1 に更新しています。現在のクォータ値をプログラムで判断し、それを減らしたいと思います。

4

2 に答える 2

0

これを行うためのより適切な方法を学ぶまで、knex.raw を使用して mysql ステートメントを使用し、クォータ列を減らします。私のコントローラーでは、decrementQuota を呼び出して、userId と courseId を渡します。

function decrementQuota(userId, courseId) {
    new User.User({userId: userId}).decrementQuota(userId, courseId);
}

私のユーザーモデルでは、 knex.raw 呼び出しがクォータの値を減らすことによって User_Course を更新する場所です。

var User = DB.Model.extend({
    decrementQuota: function(uid, cid) {
        DB.knex.raw('update User_Course set quota = quota -1 where userId=' + uid + ' and courseId=' + cid).then(function(quota) {

        });
    },
})
于 2015-05-10T17:56:29.163 に答える