node.js - Node knex Bookshelf - 使用带 fetch 的动态 where 子句

标签 node.js postgresql knex.js bookshelf.js

我需要修改一个现有的查询,该查询获取具有相关项目的模型实例,以动态更改 where 子句,具体取决于是否提供了搜索词或提供了 ID。

如果我修改下面的原文:

return db.model('Users').where('id', userId)
      .fetch({withRelated: [
        'userNames.userMessages',
        {
          ...
        },
      ]}).then(function(user) {

为此,我得到错误 db.model(...).fetch is not a function

    var query = db.model('Users')
      .fetch({withRelated: [
        'userNames.userMessages',
        {
          ...
        },
      ]});

    if (userId) {
      query.where('id', userId);
    } else if (searchTerm) {
      query.where('name', 'like', '%' + searchTerm + '%');
    }

    query.then(function(user) {

最佳答案

fetch() 需要 model instance ,由 newforge() 或其他查询的结果创建。 db.model('Users') 本身就像一个“类”,只有 Model static methods可用。

因此,您的动态查询的一种可能解决方案是:

var query = db.model('Users')
  .collection()
  .query(function(qb) {
    if (userId) {
      qb.where('id', userId);
    } else if (searchTerm) {
      qb.where('name', 'like', '%' + searchTerm + '%');
    }
  })
  .fetch({withRelated: [
    'userNames.userMessages',
    {
      ...
    },
  ]});

query.then(function(user) {

关于node.js - Node knex Bookshelf - 使用带 fetch 的动态 where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42914841/

相关文章:

postgresql - 将csv导入postgres时如何处理丢失?

reactjs - 如何在Electron应用程序中处理数据库查询(使用react-redux)?

javascript - 如何使用 Knex.js 在 Mysql 列中使用枚举类型设置默认值?

node.js - 对话流履行和 Firebase 响应时间

node.js - socket.io - 需要 (socket.io)(http)

node.js - AWS Lambda 函数错误 : Cannot find module 'lambda'

performance - 基准 Nodejs 项目

java - Spring:事务传播

postgresql 全文搜索查询太慢

sinon - 如何在Hapi/Lab测试中使用Sinon来消除knex调用?