gpt4 book ai didi

javascript - 使用 bookshelf.js 过滤关系查询

转载 作者:行者123 更新时间:2023-11-28 11:54:10 24 4
gpt4 key购买 nike

如何使用 through 方法检索所有记录,但带有中间表的条件,例如:我想检索专辑(中间表)中 is_publish 字段值为 1 的 channel 的所有轨道

到目前为止,我的代码如下所示:

new channelModel({'id': req.params.channel_id})
.fetch({withRelated: ['tracks']})
.then(function (channel) {
if (channel) {
res.json({error: false, status: 200, data: channel});
} else {
res.json({error: true, status: 404, data: 'channel does not exist'});
}
})

使用此代码,我检索所有轨道。 channel 模型的函数定义如下:

tracks: function () {
return this.hasMany('track').through('album');
}

我的数据库看起来像这样:

channel :id、名称、描述

专辑:channel_id、名称、descr、is_publish

轨道:album_id、名称、描述

有什么建议吗?

最佳答案

我尚未对此进行测试,但我相信您可以执行以下操作:

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() 的通话在您的回复中。

关于javascript - 使用 bookshelf.js 过滤关系查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28705387/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com