节点knex Bookshelf - 使用带有fetch

时间:2017-03-20 22:06:01

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

我需要修改现有查询,该查询会提取带有相关项的模型实例,以根据提供的搜索字词或提供的ID来动态更改where子句。

如果我修改下面的原文:

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

对此,我收到错误 db.model(...)。fetch不是函数

    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) {

1 个答案:

答案 0 :(得分:2)

fetch()需要由newforge()创建的model instance或其他一些查询的结果。仅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) {