在 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 的所有节点。
目前,没有方法可以直接从节点对象获取连接的节点,而无需先获取关系,也许我可以添加到客户端。