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

私は のメンテナーの 1 人ですjs-data-sql。これは現在サポートされていません。これは、要求された各リレーションに対して後続の処理を実行するloadingWithRelationswithを使用してロードされたすべてのリレーションが実行されるためです。select ... where "id" in (...)

hasOneおよび元のクエリの一部としての読み込みはbelongsTo、 を介して確実に可能である必要がありますが、元のエンティティの読み込みはリレーションの存在に依存しないため、 ではできませんleft outer joininner join

この変更を追跡するためにgithub の問題を作成しましたが、 3.0の js-data-adapterjs-data-sql拡張するために移植する必要があるため、いつ作成できるかはわかりません。js-data

于 2016-04-02T04:15:21.387 に答える