私はこれをテストしていませんが、次のことができると思います。
ChannelModel = bookshelf.BaseModel.extend({
tracks: function () {
return this.hasMany('track').through('album');
},
publishedTracks: function () {
return this.tracks().query('where', 'is_publish', true);
},
unpublishedTracks: function () {
return this.tracks().query('where', 'is_publish', false);
},
});
new ChannelModel({'id': req.params.channel_id})
.fetch({withRelated: ['pubishedTracks']})
.then(function (channel) {
if (channel) {
res.json({error: false, status: 200, data: channel.toJSON()});
} else {
res.json({error: true, status: 404, data: 'channel does not exist'});
}
});
または、次のようにすることもできます。
new ChannelModel({'id': req.params.channel_id})
.fetch()
.tap(function (channel) {
channel.tracks().query('where', 'is_publish', true).fetch()
})
.then(function(channel) {
if (channel) {
res.json({error: false, status: 200, data: channel.toJSON()});
} else {
res.json({error: true, status: 404, data: 'channel does not exist'});
}
});
require: true
また、このような状況で私が好むスタイルである を指摘するかもしれません。
new ChannelModel({'id': req.params.channel_id})
.fetch({ require: true })
.tap(function (channel) {
channel.tracks().query('where', 'is_publish', true).fetch()
})
.then(function(channel) {
res.json({error: false, status: 200, data: channel.toJSON()});
})
.catch(bookshelf.NotFoundError, function(error) {
res.json({error: true, status: 404, data: 'channel does not exist'});
});
また、返信で への通話を中断していたことにも注意して.toJSON()
ください。