【问题标题】:Node knex Bookshelf - using dynamic where clause with fetchNode knex Bookshelf - 使用带有 fetch 的动态 where 子句
【发布时间】:2017-03-23 06:31:04
【问题描述】:

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

如果我修改下面的原文:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      相关资源
      最近更新 更多