【问题标题】:Outer join of 2 tables in Bookshelf.js or Knex.jsBookshelf.js 或 Knex.js 中 2 个表的外连接
【发布时间】:2014-01-17 19:13:00
【问题描述】:

我是 Bookshelf.js 和 knex 的新手。我需要在 Bookshelf/knex 中编写一个与此等效的查询

SELECT Inv.*, Comp.* 
FROM  Inv,   Comp
WHERE Inv.uId =2 AND Comp.cId = Inv.cId;

Inv 表有:

身份证 |主键,整数不为空 col1 |字符串数据 身份证 |整数,外键引用 C 表 uId |整数外键引用U表

比较表有:

身份证 |主键,整数不为空 col3 |字符串数据

【问题讨论】:

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


    【解决方案1】:

    使用 knex 查询生成器。假设 Invs 是模型 Inv 的集合,它可能看起来像:

    Invs.forge().query(function(qb) {
      qb.join('Comp', 'Comp.cId', '=', 'Inv.cId');
      qb.where('Inv.uId', 2);
    }).fetch({withRelated: 'comps'}).then(...)
    

    comps 是 Inv 模型中定义的关系。您也可以完全跳过 bookshelf 并直接通过 bookshelf.knex 使用 knex 来形成您需要的确切查询:

    bookshelf.knex('Inv')
      .join('Comp', 'Comp.cId', '=', 'Inv.cId')
      .where('Inv.id', 2)
      .select()
      .then(...)
    

    【讨论】:

    • 我需要类似的复杂查询,似乎 knex 是不可避免的。我不知道为什么要使用 Bookshelf.js 作为 ORM 呢?使用纯 knex 查询时,关联模型(一对一、一对多等)等 ORM 功能似乎变得无用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-25
    • 2020-09-13
    • 2018-04-24
    相关资源
    最近更新 更多