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 (...)
。
加载 hasOne
和 belongsTo
作为原始查询的一部分绝对可以通过 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
我们在后端 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 (...)
。
加载 hasOne
和 belongsTo
作为原始查询的一部分绝对可以通过 left outer join
,但不能通过 inner join
作为原始实体的加载不依赖于关系的存在。
我为 js-data
3.0
js-data-sql
also needs to port over to extend js-data-adapter