js-data-sql DSSqlAdapter 为 hasOne 关系创建左连接

js-data-sql DSSqlAdapter create left join for hasOne Relationships

我们在后端 nodejs 服务中使用 js-data-sql DSSqlAdapter。 我们的模型定义有一个 hasOne 关系定义如下:

module.exports = {
    name: 'covariance_predictions',
    idAttribute: 'id',
    relations: {
      belongsTo: {
        assets: {
          localKey: 'asset_1_id',
          localField: 'Covariance_Predictions'
        }
      },
      hasOne: {
        currencies: {
          localField: 'currency',
          localKey: 'currency_id'
        }
      }
    }
  };

我们调用适配器使用:

covariancePredictions.findAll(params, {
   with: ['currencies']
})

问题

启用 knex 调试后,我们发现它不使用 left join 语句,而是使用后续的 SQL 查询,如:

sql: 'select "currencies".* from "currencies" where "id" in (?, ?, ?, ?, ?, ?, ?)' }

有人知道如何让 js-data-sql DSSqlAdapter 构建 left join 吗?喜欢:

select "covariance_predictions".id, [...], "currencies".code from "covariance_predictions" left join "currencies" on "currencies".id = "covariance_predictions".currency_id;

我是 js-data-sql 的维护者之一。目前不支持,因为通过 with 加载的所有关系都是使用 loadingWithRelations 完成的,它为每个请求的关系执行后续 select ... where "id" in (...)

加载 hasOnebelongsTo 作为原始查询的一部分绝对可以通过 left outer join,但不能通过 inner join 作为原始实体的加载不依赖于关系的存在。

我为 js-data 3.0

创建了一个 github issue to track this change, although I'm not sure when I'll be able to make it as js-data-sql also needs to port over to extend js-data-adapter