2016-07-01 1 views
1

Relayでは、GraphQLタイプへの接続を作成し、その接続を使用して他のタイプのフィールドを定義することができます。Relayの自己参照接続ですか?

ただし、接続を作成して同じタイプで使用できますか?私の基になるデータソースは、自己参照キーを持つSQLテーブルです。グラフとして表現すると、データにサイクルが存在しません。 GraphQLでこの関係を直接「自己」接続を作成することでモデル化できますか、これは間違ったアプローチですか?自分のコードに循環モジュールの依存関係を作成せずにこれを行う方法を見つけることができませんでした。

私はこのデータを「平坦化」の方法で考えて、自己接続のアイデアを放棄するほうがよいでしょうか?思考、誰ですか?

+1

をあなたは私たちにあなたがこれまで持っているコードを表示することができますか?私はあなたが['connectionDefinitions'](https://github.com/graphql/graphql-relay-js/blob/f1dfe502cfeccf80deadce3ce2cfde618a8acb36/src/connection/connection.js#L82)にサンクを渡すことができるので、これが可能であるべきだと思います。 'config.resolveNode'を介して(graphql-relay NPMパッケージを使用していると仮定して)循環依存関係を避けることができます(具体的には、1つのモジュール内でこれを行う場合)。 – wincent

+0

あなたの返信ありがとうございました。私が下記に投稿した解決策。 config.resolveNodeにサンクを渡して作業しますか? –

答えて

1

私はgraphql 0.6.0とgraphqlリレー0.4.2を使用して(次のようなコードで、自己参照接続を作成することができました:

import { GraphQLObjectType } from 'graphql'; 

import { 
    connectionArgs, 
    connectionDefinitions, 
    connectionFromArray, 
    globalIdField, 
} from 'graphql-relay'; 

import { nodeInterface } from './nodeDefinitions'; 
import { getRelatedData } from './dataSource'; 

const dataType = new GraphQLObjectType({ 
    name: 'Data', 
    fields:() => ({ 
    id: globalIdField('Data'), 
    related: { 
     type: connectionDefinitions({ 
     name: 'Data', 
     nodeType: dataType, 
     }).connectionType, 
     args: connectionArgs, 
     resolve: (parent, args) => connectionFromArray(
     getRelatedData(parent.id), 
     args 
    ), 
    }, 
    }), 
    interfaces:() => [nodeInterface], 
});