我在多对多关系中有两个书架模型,并且我希望在我附加或分离某些关系时更新时间戳。
这是我的模特:
var Video = Bookshelf.Model.extend({
tableName: 'video',
program: function(){
return this.belongsToMany(Bookshelf.model('Program'), 'programvideo', 'videoId', 'programId');
}
});
var Program = Bookshelf.Model.extend({
tableName: 'program',
videos: function(){
return this.belongsToMany(Bookshelf.model('Video'), 'programvideo', 'programId', 'videoId');
}
});
当我使用
时,一切正常prgm.videos().attach(videos);
但有没有办法为这种关系添加时间戳?我是否需要在Bookshelf中定义枢轴模型?
由于
答案 0 :(得分:3)
嗯,您可以轻松制作透视模型,在迁移中创建timestamps
并在模型中启用时间戳,一切都可以无缝工作!
但是,如果您想在没有其他模型的情况下解决此问题,则必须首先在模型中定义withPivot
,例如:
var Stations = bookshelf.Model.extend({
tableName: 'stations',
stationsRoutes: function() {
return this.belongsToMany(Routes, 'stations_routes').withPivot('time');
}
});
var Routes = bookshelf.Model.extend({
tableName: 'routes',
stationsRoutes: function() {
return this.belongsToMany(Stations, 'stations_routes').withPivot('time');
}
});
然后,每次附加数据时,都必须调用updatePivot
,例如:
router.get('/updatePivot/:id', function(req, res) {
new Routes({
'id': req.params.id
}).fetch({
withRelated: ['stationsRoutes']
}).then(function(result) {
result.stationsRoutes().attach({
station_id: 3
}).then(function() {
result.stationsRoutes().updatePivot({
'time': '09:09'
}/*, {
query: function(qb) {
qb.where({
'id': 8
});
}
}*/).then(function() {
result.load('stationsRoutes').then(function(result_reloaded){
res.json(result_reloaded);
});
});
});
});
});
我评论了一段代码,您可以在其中过滤更新的联结表中的特定行(如果省略,所有相应的行都会更新)。
希望这有帮助!