【问题标题】:How to query with a list of id in Bookshelf JS如何在 Bookshelf JS 中使用 id 列表进行查询
【发布时间】:2016-05-05 03:02:04
【问题描述】:

如何使用 在单个查询中按 PK 获取记录列表?

结束查询应该相当于:

SELECT * FROM `user` WHERE `id` IN (1,3,5,6,7);

【问题讨论】:

  • 你试过类似model.where('ID', [1,3,5,7,8]).fetch().then(function() { });
  • 是的,但是语法错误:)

标签: bookshelf.js node.js bookshelf.js


【解决方案1】:

此解决方案有效:

AdModel
  .where('search_id', 'IN', [1, 2, 3])
  .fetchAll();

您也可以使用 Knex QueryBuilder 来获得相同的结果

AdModel
.query(qb => {
    qb.whereIn('search_id',  [1, 2, 3]);
})
.fetchAll();

【讨论】:

  • 感谢 DeadEye,我发现 Knex 的解决方案类似于 knex.select('name').from('users') .whereIn('id', [1, 2, 3]) 。 orWhereIn('id', [4, 5, 6])
  • 对,使用 knex.js,这很简单 (;
  • 请注意,结果的顺序不保证与查询相同。如果您要抽象批处理加载程序,这很重要,例如 github.com/facebook/dataloader
  • @VũNguyễn 但我怎么能用withRelatedwhereIn
  • @Growler 我使用 knex,您将能够使用 whereIn,但据我所知,您无法在 Bookshelf 中执行此操作。执行查询以获取您的 WHERE IN 列表,然后使用 AdModel.where('search_id', 'IN', result.toJSON())
【解决方案2】:

列出(单个)查询和获取关系(withRelated)

BookshelfModel
  .where('field_id', 'IN', [1, 2, 3])
  .fetchAll({withRelated: ["tableA", "tableB"]});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2016-02-27
    • 2019-12-26
    • 2017-01-05
    • 2020-02-27
    相关资源
    最近更新 更多