在上一篇博客中,介绍了php连接neo4j图数据库以及基本使用,博客地址:
https://blog.csdn.net/u013090676/article/details/81435944
本文继续介绍php 对neo4j图数据库进行查询,遍历,下面直接上代码:
1、查询节点以及关系:
$result = $client->run('MATCH (m:person{name:"suika"})-[r]-(n) RETURN m,r,n');
foreach ($result->getRecords() as $r) {
//获取节点标签
print_r($r->get('n')->labels());
//获取节点所有属性的值
print_r($r->get('n')->values());
//获取节点所有属性的key
print_r($r->get('n')->keys());
//获取节点某个属性的值,不存在则返回空
print_r($r->get('n')->value("uid"));
//获取关系类型
print_r($r->get('r')->type());
//获取关系属性
print_r($r->get('r')->value('time'));exit();
}
2、遍历与节点相关联的节点以及节点所处的层级:
$result = $client->run('Match (m:person{name:"marisa"})-[r:friend*]->(n:person) return n,r');
foreach ($result->getRecords() as $r) {
//关系层级(不是最小层级)
print_r(count($r->get('r')));
//节点
print_r($r->get('n')->value("name"));
}
3、获取两个节点间的所有路径:
$result = $client->run('Match p=(m:person{name:"marisa"})-[r:friend*]->(n:person{name:"sakuya"}) return p');
foreach ($result->getRecords() as $r) {
//路径
$path = $r->pathValue("p");
//路径序列(节点与关系交叉组成)
$seq = $r->pathValue("p")->sequence;
//节点
$nodes = $path->nodes();
//关系
$relationships = $path->relationships();
for($i = 0;$i < count($seq);$i++){
if($i%2 == 1){
if($nodes[$seq[$i]]){
print_r($nodes[$seq[$i]]->value("name"));
}else{
print_r("存在空记录");
}
}else{
if($relationships[$seq[$i]-1]){
$type = $relationships[$seq[$i]-1]->type();
$time = $relationships[$seq[$i]-1]->value("time");
}else{
print_r("存在空记录");
}
}
print_r("->");
}
}