我想你可以说我正在构建一个reddit风格的应用程序。所以我有一个主题,该主题有评论,这些评论有父评论等。这是我的评论模型:
var Comment = bookshelf.Model.extend({
tableName: 'comments',
topic: function() {
return this.belongsTo(Topic, 'topic_id');
},
children: function() {
return this.hasMany(Comment, 'parent_id')
}
});
所以在我的.get('/ topic')页面中,我加载了这样的评论:
new Comment()
.query({where: {topic_id: topic_id}})
.query({where: {parent_id: null}})
.fetchAll({
withRelated: ['children.children.children.children']
})
所以这对我来说是取得所有顶级评论,并将所有儿童评论最多嵌入4级。我需要对每个评论做的是检查一个名为'votes'的表,其中'comment_id'是评论的id,其中'account_id'是当前req.user的帐户ID,并从'vote_type'列附加(这将是'每个评论都有'或''')。对这个问题的任何见解都会很棒。
P.S。对于奖励积分,我可以替换相关的任何建议:['children.children.children.children']并加载所有子评论,直到它们全部被加载?谢谢你的时间:))
答案 0 :(得分:3)
所以解决方案是回退到knex,用所有相关数据获取我对该主题的所有评论,然后构建一个树。这是我最后使用的查询。非常感谢irc的#bookshelf频道中的rhys-vdw。
knex('comments').leftOuterJoin('votes', function() {
this.on('comments.id', 'votes.comment_id')
.andOn(knex.raw('votes.account_uuid = ?', req.user.uuid));
})
.leftOuterJoin('vote_count', function() {
this.on('comments.id', 'vote_count.comment_id');
})
.select('comments.*', 'votes.vote_type', 'vote_count.upvotes', 'vote_count.downvotes')
.where('comments.topic_id', '=', topic_id)