2017-03-29 1 views
0

現在、私はデータベースに接続してSequelizeでテーブルを作成しており、残りの作業はGraphqlで行い、スキーマ、クエリ、リゾルバを作成しています。graphqlリゾルバでmySQLから既存のリンクテーブルをクエリしていますか?

私は、これらの3つのリンクされたテーブルからデータを求める方法で壁にヒットしているように見える:

CITY CompLocations CompIssue | id | | locationID | compID | | locationID | issueLevel | |*1* | -----> | 1 | 45 | ------> | 45 | *5* | 2 | | 2 | 203 | | 203 | 3

私はすべてのCompIssue.issueLevelのCITY.id、経由に関連付けられているを取得する必要がありますこの既存の関係/関連性。

SequelizeのAPIで関連付けとクエリを調べています。どのようにGrapql/Apolloリゾルバ関数内で上記の質問をしますか?

答えて

0

これは古い質問ですが、最近似たような問題が発生しました。私の場合、NodeJsからMSSQLサーバに接続するためにseriateを使用しており、DB設計に基づいてGraphQLスキーマを動的に作成したいと考えていました。

`SELECT 
    BASE_TABLE = t.TABLE_NAME, 
    BASE_COLUMN = col.COLUMN_NAME, 
    DATA_TYPE, 
    LEN_PRECISION = COALESCE(
          CHARACTER_MAXIMUM_LENGTH, 
          numeric_precision, 
          datetime_precision 
        ), 
    LINKED_TABLE = keys.Data_Table, 
    LINKED_COLUMN = keys.Data_Column 
FROM INFORMATION_SCHEMA.TABLES t INNER JOIN 
    INFORMATION_SCHEMA.COLUMNS col ON 
     t.TABLE_NAME = col.TABLE_NAME LEFT JOIN 
    (SELECT 
      Base_Table = FK.TABLE_NAME, 
      Base_Column = CU.COLUMN_NAME, 
      Data_Table = PK.TABLE_NAME, 
      Data_Column = PT.COLUMN_NAME, 
      Constraint_Name = C.CONSTRAINT_NAME 
    FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS C INNER JOIN 
      INFORMATION_SCHEMA.TABLE_CONSTRAINTS FK ON 
       C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME INNER JOIN 
      INFORMATION_SCHEMA.TABLE_CONSTRAINTS PK ON 
       C.UNIQUE_CONSTRAINT_NAME = PK.CONSTRAINT_NAME INNER JOIN 
      INFORMATION_SCHEMA.KEY_COLUMN_USAGE CU ON 
       C.CONSTRAINT_NAME = CU.CONSTRAINT_NAME INNER JOIN 
      (SELECT 
        i1.TABLE_NAME, 
        i2.COLUMN_NAME 
       FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS i1 INNER JOIN 
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE i2 ON 
         i1.CONSTRAINT_NAME = i2.CONSTRAINT_NAME 
       WHERE i1.CONSTRAINT_TYPE = 'PRIMARY KEY' 
      ) PT ON 
      PT.TABLE_NAME = PK.TABLE_NAME 
    ) keys ON 
     keys.Base_Table = t.TABLE_NAME AND 
     keys.Base_Column = col.COLUMN_NAME 
WHERE t.TABLE_TYPE = 'BASE TABLE'` 

これが最もエレガントなこと、および大規模データベースにいくつかのパフォーマンスの問題をヒットする可能性があるが、それは私のためによく働いていないことがあります。このルートを行く私は、SQLを得ました。最終的なデータセットは、データベース設計の他のテーブル/列ペアへのリンクを含むテーブル/列ペアのリストを提供します。

このデータセットから、リンクを確認し、GraphQLセットアップで必要なサブクエリを作成するのは "些細"なはずです。

+0

この情報の共有に感謝します。ありがとう – lxm7

関連する問題