简体   繁体   中英

Outer join of 2 tables in Bookshelf.js or Knex.js

I am new to Bookshelf.js and knex. I need to write a query equivalent to this in Bookshelf/ knex

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

Inv Table has:

Id     |  primary key, integer  not null
col1   | string data
cId    | integer, foreign key references C table
uId    | integer  foreign key reference U table

Comp Table has:

cId     |  primary key, integer  not null 
col3    | string data

Use knex query builder. Assuming Invs is a collection for model Inv it may look something like:

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

Where comps would be a relation defined in the Inv model. You could also skip bookshelf altogether and use knex directly through bookshelf.knex to form the exact query you need:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM