【问题标题】:How to add simple Where-clause with bookshelf-pagemaker如何使用 bookshelf-pagemaker 添加简单的 Where 子句
【发布时间】:2015-07-13 02:27:37
【问题描述】:

使用 bookshelf-pagemaker NodeJS 模块:

.. 我能够在从表中选择所有行的地方进行基本的分页工作。但我没有看到如何在查询中添加 WHERE 子句。

问题:

谁能分享一个使用 bookshelf-pagemaker 的小例子 带有搜索条件 - 例如SELECT * FROM user WHERE id > 10 ?

var Bookshelf = require('bookshelf').mysqlAuth;
var pagemaker = require('bookshelf-pagemaker')(Bookshelf);

var UserDAO = Bookshelf.Model.extend({
    tableName: 'user'
});

function getRegisteredUsers(pageNum, pageSize, offset, callback) {   

    var args = {
        params: {
            start: offset,
            page: pageNum,
            length: pageSize
        },
        model: UserDAO
    };

    var resultObj = pagemaker.datatables.paginate(args);
    resultObj.then(function (result) {
        console.log('Enter: paginate(args)');
        callback(result);
    });
}

【问题讨论】:

  • 当前版本不支持。我将向 args 对象添加一个“where”参数,以便您可以指定它并在我将其发布到 npm 时回复更新版本。我没有想到这个用例,现在我对书架有了更好的理解,可能需要重新设计模块。您可能还想关注我的 Dreamcatcher 项目,因为我将在那里添加一个分页选项,并且该模块中的方法允许您执行更多书架/knex 类型的功能。
  • 另外,args 对象的 params 字段应该是来自您的 Web 服务调用的请求参数对象。我只用restify测试了代码,所以它应该是那个模块中的req.params

标签: node.js bookshelf.js bookshelf-pagemaker


【解决方案1】:

我在新发布的 0.1.3 版中添加了对此的支持。您现在可以向传递给 paginate 函数的 args 对象提供 where 语句。您提供的 sql 语句将与过滤器 sql 一起添加,因此您仍然可以使用搜索功能

你的 args 对象看起来像

    var args = {
        params: {
            start: offset,
            page: pageNum,
            length: pageSize
        },
        model: UserDAO,
        where: '(id > 10 AND id < 100)'
    };
var resultObj = pagemaker.datatables.paginate(args);

resultObj.then(function (result) {
        paginateHandler(result);
    });
}

function paginateHandler (result) 
{
    var numPaginatedRecords = result.recordsFiltered;

    var pagesTotal = Math.ceil(numPaginatedRecords / ITEMS_ON_PAGE);

    res.render('my_paginated_view', {
        data: result.data,
        currentPage: <from URL or default 1>,
        pagesCount: pagesTotal
    });
};

【讨论】:

  • 非常感谢您查看我的问题并更新模块以支持 WHERE 子句。非常高兴你这么快就解决了这个问题。我希望您不介意我对您的帖子进行了一些编辑,以包含一些额外的代码,用于在进行过滤查询时设置正确数量的页面链接。最好的问候
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2015-02-07
  • 2017-07-04
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多