0

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

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

$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/>';
}

我想显示:

艺人姓名:

  • 画名
  • 画名
  • ETC

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

4

3 回答 3

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/>';
}
于 2016-09-23T20:44:24.293 回答
0

我最终得到它与以下工作:

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 次观看
  • Still Lake - 125 次观看

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

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

于 2016-09-24T06:09:40.243 回答
0

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;
    }
}
于 2016-09-26T11:31:27.667 回答