使用 neo4j-php-client 从 collect() 访问结果
Accessing results from collect() using neo4j-php-client
下面显示:
Marlena 有 12 幅画(基本上来自文档)
如何访问 collect(Paintings) 中的数据
例如:标题
$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 和记录显示,所以我知道数据正在通过。
这应该适合你:
$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/>';
}
我最终让它与以下内容一起工作:
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 次浏览
- Pooled Water - 69 次浏览
- 静湖 - 125 次浏览
最后的笔记
我实际上尝试了与您在努力使它工作时所建议的代码相似的代码。我有点困惑为什么它没有。
所以我想知道。我的想法可以接受吗?
a) 我建议你为你的 return 值设置别名,这样更容易在驱动程序级别获取它们
b) 绘画记录值 returns 是一个 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;
}
}
下面显示: Marlena 有 12 幅画(基本上来自文档)
如何访问 collect(Paintings) 中的数据 例如:标题
$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 和记录显示,所以我知道数据正在通过。
这应该适合你:
$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/>';
}
我最终让它与以下内容一起工作:
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 次浏览
- Pooled Water - 69 次浏览
- 静湖 - 125 次浏览
最后的笔记 我实际上尝试了与您在努力使它工作时所建议的代码相似的代码。我有点困惑为什么它没有。
所以我想知道。我的想法可以接受吗?
a) 我建议你为你的 return 值设置别名,这样更容易在驱动程序级别获取它们
b) 绘画记录值 returns 是一个 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;
}
}