【问题标题】:How do I filter results by a join in BookshelfJS?如何通过加入 BookshelfJS 过滤结果?
【发布时间】:2016-05-15 17:00:01
【问题描述】:

我有一张表,上面有两个关系:

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

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

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 做到这一点?

【问题讨论】:

  • 谁投了反对票……你能解释一下原因吗?没有解释的反对票是没有用的。

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


【解决方案1】:

我是通过使用查询生成器完成的。

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

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

如果这在纯书架中是可能的,请告诉我,我会为答案投票!

【讨论】:

  • 注意:new Job({id:1}).query 不会过滤 'id=1'。调用“查询”似乎会覆盖该约束。
猜你喜欢
  • 2019-10-10
  • 2019-03-01
  • 2021-08-14
  • 1970-01-01
  • 2018-08-18
  • 1970-01-01
  • 2012-02-26
  • 1970-01-01
  • 2020-01-31
相关资源
最近更新 更多