0

我们在后端 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;
4

1 回答 1

1

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

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

我创建了一个github 问题来跟踪此更改,尽管我不确定何时能够实现它,因为js-data-sql还需要移植以扩展js -data-adapterjs-data 3.0

于 2016-04-02T04:15:21.387 回答