Neo4j合并不保存数据

时间:2019-06-06 11:51:49

标签: neo4j cypher graphaware

我有以下使用PHP和GraphAware的代码:

$stack = $client->stack();
$stack->push('  MATCH (student:Student{id:123})
        MATCH (spring:Term{name:"Spring2017"})
        MATCH (class:Class{name:"Cypher101"})
        MERGE (student)-[:ENROLLED_IN]->(class)-[:FOR_TERM]->(spring)');
$results = $client->runStack($stack);

$res = $client->run('MATCH (n) RETURN count(n)');
print_r($res->records());

我已复制了以下示例代码:https://neo4j.com/developer/kb/understanding-how-merge-works/,由于某种原因,print_r()返回以下内容:

Array
(
    [0] => GraphAware\Bolt\Record\RecordView Object
        (
            [keys:protected] => Array
                (
                    [0] => count(n)
                )

            [values:protected] => Array
                (
                    [0] => 0
                )

            [keyToIndexMap:GraphAware\Bolt\Record\RecordView:private] => Array
                (
                    [count(n)] => 0
                )

        )

)

如果我运行CREATE命令,则查询工作正常,但由于某些原因,上面的代码无法正常运行。有人可以告诉我我在做什么错吗?

1 个答案:

答案 0 :(得分:2)

您的查询似乎正确。

检查Neo4j数据库中是否存在这些节点。

  • 如果数据库中不存在这些节点,请首先创建这些节点,然后 然后运行查询。
  • 您也可以将DB::table('users') ->join('contacts', function ($join) { $join->on('users.id', '=', 'contacts.user_id')->orOn(...); }) ->get(); 替换为MATCH,在这种情况下,您不必这样做
    必须分别创建这些节点。
  

注意:不建议在单个查询中使用多个MERGE,因此请尝试   使用第一个解决方案(分别创建节点)。