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