如何将指定Neo4j Cypher查询转换为PHP Cypher DSL?
PHP Cypher DSL 转换实现
以下是对应原生Cypher查询的PHP Cypher DSL代码实现:
use Neo4j\Cypher\DSL\QueryBuilder; use Neo4j\Cypher\DSL\Node; use Neo4j\Cypher\DSL\Functions\Type; // 初始化查询构建器 $queryBuilder = new QueryBuilder(); // 定义两个Resource节点变量a和b $a = Node::create('a')->withLabel('Resource'); $b = Node::create('b')->withLabel('Resource'); // 构建MATCH子句 $queryBuilder->match($a, $b); // 构建WHERE子句,绑定参数过滤节点 $queryBuilder->where( $a->property('uri')->equals($queryBuilder->param('uri')), $b->property('uri')->equals($queryBuilder->param('object')) ); // 创建动态类型的关系r,类型绑定为参数propertyUri $relationship = $a->relationshipTo($b, $queryBuilder->param('propertyUri'))->named('r'); $queryBuilder->create($relationship); // 构建RETURN子句,返回关系类型 $queryBuilder->return(Type::of($relationship)); // 生成Cypher语句(调试用) // $cypher = $queryBuilder->getQuery(); // 执行时传入参数数组:['uri' => '目标URI', 'object' => '关联对象URI', 'propertyUri' => '关系类型']
关键细节说明:
- 动态关系类型:通过
$queryBuilder->param('propertyUri')将关系类型设为可动态传入的参数,对应原生查询中的{$propertyUri},兼顾灵活性与安全性。 - 参数绑定:所有外部变量均通过
param()方法绑定,避免Cypher注入风险,完全对应原生查询的参数逻辑。 - 关系类型返回:使用
Type::of($relationship)实现原生Cypher中type(r)的功能。
内容的提问来源于stack exchange,提问作者Victor Donet
相关产品推荐
相关产品推荐

