【问题标题】:Bookshelf.JS | How to use where and orWhere in query书架.JS |如何在查询中使用 where 和 orWhere
【发布时间】:2015-11-19 19:19:56
【问题描述】:

BookshelfJS 有以下使用 'query' 的示例:

model
  .query({where: {other_id: '5'}, orWhere: {key: 'value'}})
  .fetch()
  .then(function(model) {
    ...
  });

是否可以这样做:

var whereObj = {
  'key1':'value1',
  'key2':'value2'
};

model
  .query({where: whereObj, orWhere: {key: 'value'}})
  .fetch()
  .then(function(model) {
    ...
  });

【问题讨论】:

    标签: javascript bookshelf.js


    【解决方案1】:

    你有两个选择:

    使用回调

    .query(function (qb) {
        qb.where(other_id, '5')
            .orWhere('key', 'value');
    });
    

    使用对象

    .query({
        where: { other_id: '5' },
        orWhere: { key: 'value' }
    })
    

    【讨论】:

    • 所以以 .orWhere() 而不是 .where() 开头?听起来不直观。 :( 感觉应该反过来。
    • 哦,对不起。这是回调示例中的错误 - 以 where 开头。如果orWhere 是第一个*where 语句,则orWhere 默认为where
    【解决方案2】:

    查看bookshelf-eloquent 扩展,它直接在书架模型上公开了许多 Knex.js 函数。您的代码将被简化为:

    let result = await Model.where({other_id: 5}).orWhere('key', 'value').fetch();
    

    【讨论】:

    • 很棒的扩展。谢谢!
    【解决方案3】:

    对于更复杂的查询,你可以使用这个:

    .query(function(qb) {
                        qb.select('*');
                        qb.where(function () {
                            this.where('attr1', 1);
                            this.where('attr2','in' , [1,2,3]);
                        });
                        qb.orWhere(function () {
                            this.where('attr1', 2);
                            this.where('attr2','in' , [4,5,6]);
                        });
                    })
    

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 1970-01-01
      • 2021-10-10
      • 2021-02-11
      • 1970-01-01
      • 2015-01-19
      • 2021-11-06
      • 2017-01-03
      • 2016-09-26
      相关资源
      最近更新 更多