2016-05-15 42 views
-1

我有上有兩個關係表:如何通過BookshelfJS中的連接過濾結果?

工作 - >公司與 工作 - >用戶

我想只選擇那些已經附加有一個用戶,並得到了用戶的工作與他們相關聯。我試過了:

new Job().fetchAll({withRelated: ['user']}) 

但是,這總是返回用戶附加的所有作業。我也試過:

new Job().fetchAll({ 
    withRelated: [{ 
     'user':function(qb){ 
      qb.where('id','=','job.user_id'); 
     } 
    }] 
}); 

和我可以想到的用戶子查詢的每個組合。但是,這隻允許我過濾用戶關係返回的結果。

我知道SQL,但我想使用ORM。所以最終的查詢應該是這樣的:

SELECT * FROM jobs JOIN users ON users.id = jobs.user_id LEFT JOIN companies on job.company_id = companies.id 

我怎樣才能做到這一點使用BookshelfJS或Knex?

+0

誰低估了......你能解釋一下爲什麼嗎?沒有解釋的投票是無用的。 –

回答

0

我使用查詢生成器完成了它。

new Job().query(function(qb){ 
    qb.innerJoin('users', 'user_id', 'users.id'); 
}).fetchAll({ 
    withRelated: ['company', 'users'] 
}); 

基本上結合了書架和Knex語句。

如果這在純書架上是可行的,請告訴我,我會讚揚答案!

+0

注意:新的Job({id:1})。query將不會篩選'id = 1'。調用「查詢」似乎會覆蓋該約束。 –