Neoxygen の NeoClient では、完全に実現可能でユーザー フレンドリーです。
最初に確認することは、応答フォーマッターを有効にすることです。
$client = ClientBuilder::create()
->setAutoFormatResponse(true)
->addConnection(xxx...)
->build();
次に、クエリに関して、グラフの接続性に応じてメモリの動作を回避するために、深さの制限を確実に設定します。
MATCH (a:`Category`{category_id:0})-[r:HAS_CHILD*..20]->(b:`Category`)
RETURN b,r
次に、クライアントでそれを送信すると、クライアントが結果をグラフ構造に再マッピングするという利点があります。
$query = 'MATCH (a:`Category`{category_id:{id}})-[r:HAS_CHILD*..20]->(b:`Category`)'
RETURN b,r';
$children = $client->sendCypherQuery($q, ['id'=>0])->getResult()->getNodes();
これで、関係と関係が開始ノードと終了ノードを知っているので、各ノードは彼が持っているものを知っています。例:
$children
最初の深さのノードなので、
$rels = $children->getOutboundRelationships();
$nodes = [];
foreach ($rels as $rel) {
$nodes[] = $rel->getEndNode();
}
$nodes は深さ 2 のすべてのノードを保持するようになりました。
現在、最初に関係を取得せずにノード オブジェクトから接続されたノードを直接取得する方法はありません。クライアントに追加できるものかもしれません。