【问题标题】:Accessing results from collect() using neo4j-php-client使用 neo4j-php-client 从 collect() 访问结果
【发布时间】:2016-09-22 16:07:24
【问题描述】:

显示如下: Marlena 有 12 幅画(基本上来自文档)

如何访问 collect(绘画) 中的数据 例如:标题

$query = "MATCH (n:Artist)-[:PAINTED]->(Painting) RETURN n.first_name, collect(Painting) as paintings";
$result = $client->run($query);

foreach ($result->getRecords() as $record) {
    echo sprintf('%s has %d paintings', $record->value('n.first_name'), count($record->value('paintings')));
    echo '<br/>';
}

我想展示:

艺术家姓名:

  • 画名
  • 画名

我假设这些数据可以从绘画或绘画中提取。我只是不确定如何组合查询。它将使用 print_r 和记录显示,因此我知道数据正在通过。

【问题讨论】:

    标签: php neo4j cypher graphaware


    【解决方案1】:

    这应该适合你:

    $query = "MATCH (n:Artist)-[:PAINTED]->(Painting) RETURN n.first_name, collect(Painting) as paintings";
    $result = $client->run($query);
    
    foreach ($result->getRecords() as $record) {
        echo sprintf('%s has %d paintings:<br/>', $record->value('n.first_name'), count($record->value('paintings')));
        foreach ($record->value('n.paintings') as $painting) {
            echo sprintf('- %s<br/>', $painting->value('title'));
        }
        echo '<br/>';
    }
    

    【讨论】:

    • 不幸的是,上面的内容不起作用,只显示我最初的内容。 Jill 有 1 幅画: Disha 有 7 幅画: Marlena 有 12 幅画: Sandy 有 4 幅画:
    【解决方案2】:

    a) 我建议您为返回值设置别名,在驱动程序级别获取它们更容易

    b) 绘画记录值返回一个Node对象数组,因此是可迭代的,不需要计算for循环:

    $query = "MATCH (n:Artist)-[:PAINTED]->(Painting) RETURN n.first_name as firstName, collect(Painting) as paintings";
    $result = $client->run($query);
    
    foreach($result->records() as $record) {
        echo sprintf('%s painted %d paintings', $record->get('firstName'), count($record->get('paintings'))) . PHP_EOL;
        foreach ($record->get('paintings') as $painting) {
            echo sprintf('%s - %d views', $painting->value('title'), $painting->value('views')) . PHP_EOL;
        }
    }
    

    【讨论】:

    • 非常感谢,它按我的预期工作。我不禁想我在最初的测试中一定错过了一些简单的事情。因为这看起来很像我刚开始时尝试的。
    【解决方案3】:

    我最终让它与以下内容一起工作:

    foreach ($result->getRecords() as $record) {
        $fname = $record->values()[0]->get('first_name');
        $lname = $record->values()[0]->get('last_name');
        echo '<strong>'.$fname.' '.$lname.' painted:</strong><br/>';
        for ($x = 0; $x < count($record->values()[1]); $x++) {
                print_r($record->values()[1][$x]->get('title'));
                echo ' - ';
                print_r($record->values()[1][$x]->get('views'));
                echo ' views<br/>';
        }
        echo '<br/>';
    }
    

    提供以下输出:

    名字姓氏画:

    • Lumine - 86 次观看
    • 池水 - 69 次观看
    • 静湖 - 125 次观看

    最后说明 实际上,我尝试了与您在努力使其正常工作期间所建议的代码类似的代码。我有点困惑为什么它没有。

    所以我想知道。我的想法可以接受吗?

    【讨论】:

    • php 客户端提供了一些帮助处理结果集,尤其是阅读github.com/graphaware/…
    • 现在阅读 1000 次。除了我上面所做的之外,我所做的一切似乎都没有奏效。
    • 我添加了一个简化版的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多