0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-27 22:49:56 -05:00
ghost/core/server/models/plugins/include-count.js
Hannah Wolfe f8d9af1010 Add some debugging tools to filters
- pass debug: true to the API to get some useful debug output
- does not work in production mode

Note: I have added these lines back in so many times in the past month or so so that I could
figure out what was happening, I figured everyone else might find them useful.

TODO: use a proper logging method dependent on env
2015-11-18 19:17:06 +00:00

61 lines
1.8 KiB
JavaScript

var _ = require('lodash');
module.exports = function (Bookshelf) {
var modelProto = Bookshelf.Model.prototype,
Model,
countQueryBuilder;
countQueryBuilder = {
tags: {
posts: function addPostCountToTags(model) {
model.query('columns', 'tags.*', function (qb) {
qb.count('posts_tags.post_id')
.from('posts_tags')
.whereRaw('tag_id = tags.id')
.as('post_count');
});
}
}
};
Model = Bookshelf.Model.extend({
addCounts: function (options) {
if (!options) {
return;
}
var tableName = _.result(this, 'tableName');
if (options.include && options.include.indexOf('post_count') > -1) {
// remove post_count from withRelated and include
options.withRelated = _.pull([].concat(options.withRelated), 'post_count');
options.include = _.pull([].concat(options.include), 'post_count');
// Call the query builder
countQueryBuilder[tableName].posts(this);
}
},
fetch: function () {
this.addCounts.apply(this, arguments);
if (this.debug) {
console.log('QUERY', this.query().toQuery());
}
// Call parent fetch
return modelProto.fetch.apply(this, arguments);
},
fetchAll: function () {
this.addCounts.apply(this, arguments);
if (this.debug) {
console.log('QUERY', this.query().toQuery());
}
// Call parent fetchAll
return modelProto.fetchAll.apply(this, arguments);
}
});
Bookshelf.Model = Model;
};