2016-05-15 74 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'。调用“查询”似乎会覆盖该约束。 –