数据库
首页 > 数据库> > mysql – Bookshelf.js – 如何从连接表中获取列?

mysql – Bookshelf.js – 如何从连接表中获取列?

作者:互联网

我有一个用户模型和一个课程模型,他们有多对多的关系,所以基本上用户可以加入多个课程,课程有很多用户(学生).我有一个连接表,我正在尝试向连接表添加其他信息.基本上,用户每个课程可以提出每月的问题配额.所以我在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.我想以编程方式确定当前的配额值,然后减少它.

解决方法:

尝试使用Pivot.例如,返回this.belongsToMany(Comment).withPivot([‘created_at’,’order’]);你可以在这里放置你的配额,你可以在加载关系时得到它.

更新:

好的,这是一个例子:

    new Town().where({
            town_number: 2301
        }).fetchAll({
            columns: ['town_title', 'id'],
            withRelated: [{
                'address': function(qb) {
                    qb.select('addresses.town_id', 'addresses.participant_id');
                    qb.columns('addresses.street_name');
                    // here you could simply do qb.where({something_id: 1}); as well
                }
            }]
        }).then(function(result) {
            res.json(result);
        });

所以基本上不是简单地说withRelated:[‘table_name’],而是将表名定义为对象,使用属性table_name和function作为值,它具有查询构建器(qb),您可以单独查询该表.

希望这可以帮助!

标签:bookshelf-js,mysql,node-js
来源: https://codeday.me/bug/20190728/1558754.html