如何通过BookshelfJS中的联接筛选结果?

时间:2016-05-15 17:00:02

标签: javascript mysql orm bookshelf.js knex.js

我有一张表有两个关系:

工作 - >公司和 工作 - >用户

我想只选择那些已经附加了用户的作业,并让用户与之相关联。我试过了:

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进行此操作?

1 个答案:

答案 0 :(得分:0)

我是使用查询构建器完成的。

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

基本上将Bookshelf与Knex语句相结合。

如果在纯书架中可以做到这一点,请告诉我,我会提出答案!