web-dev-qa-db-ja.com

Sails.jsとWaterlineでSQLの結合と関係を実行する方法は?

sails.js でリレーショナルスキーマを設定し、結合を実行する方法を誰かが私に案内できますか?

21
Brieuce Wayne

協会は正式にウォーターラインでサポートされています

概観

ドキュメントから

Sails and Waterlineを使用すると、複数のデータストア間でモデルを関連付けることができます。つまり、ユーザーがPostgreSQLに住んでいて、写真がMongoDBに住んでいる場合でも、同じデータベースに住んでいるかのようにデータを操作できます。同じアダプターを使用して、さまざまな接続(つまり、データストア/データベース)にまたがる関連付けを設定することもできます。これは、たとえば、アプリが会社のデータセンターのMySQLデータベースに保存されているレガシーレシピデータにアクセス/更新する必要がある場合に便利ですが、クラウドの新しいMySQLデータベースから食材データを保存/取得することもできます。

サポートされる関連タイプ

計画された関連タイプ


元の投稿

私は、Sailsで使用されるORMであるWaterlineの作者です。ウォーターラインは新品で、常に機能を追加しています。現在、関連付けはサポートされていませんが、ロードマップの次の段階です。私たちは、ほとんどの人が本当に気に入っていると思われる関連付け用のAPIを作成しました。 [Proposed Sails Associations API] [1]で、進行中の作業と提案されたAPIを表示できます。

次は、協会とトランザクションに取り組み、来月かそこらでそれらを準備することを望みます。

一方、MySQLまたはPostgreSQLアダプターを使用している場合、両方のアダプターがraw .query()メソッドを公開します。これにより、手動で作成したSQLクエリを渡して実行できます。これは理想的ではないことは承知していますが、関連付けと結合のサポートを受けながら、アプリの構築を続けることができます。

Queryメソッドの関数シグネチャは次のとおりです。

Model.query(<sql query>, <optional data>, callback);
43
particlebanana

パーティクルバナナの例は機能しますが、実際には「var instance = new User._model(values)」のような「new」を使用する必要があります。私は次のコードを使用しており、動作します。

Accounts.query(query, function(err, accounts) {
  if (err)
    return fn(err);

  accounts = _.map(accounts, function(account) {
    return new Accounts._model(account);
  });

  fn(null, accounts);
});
6
Bruce Kim