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

Node knex Bookshelf - using dynamic where clause with fetch

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

如果我修改下面的原文:

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

fetch() 需要 model instance, created by new, forge() or a result of some other query. db.model('Users') alone is just like a "class", having only the 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) {