Доступ к результатам из collect () с помощью neo4j-php-client

Ниже отображаются:
Марлена имеет 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/>';
}

Я хотел бы отобразить:

Имя исполнителя:

  • название картины
  • название картины
  • так далее

Я предполагаю, что эти данные могут быть получены из живописи или картин. Я просто не уверен, как составить запрос. Он будет отображаться с использованием print_r и записи, поэтому я знаю, что данные поступают.

0

Решение

а) я предлагаю вам псевдоним ваших возвращаемых значений, их проще получить на уровне драйвера

б) Значение записи картины возвращает массив 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;
}
}
0

Другие решения

Это должно работать для вас:

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

Я закончил тем, что заставил это работать со следующим:

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 просмотров

Финальные заметки
Я на самом деле пробовал код, подобный тому, что вы предлагали во время моей борьбы, чтобы это заработало. Я немного запутался, почему это не так.

Так что мне осталось интересно. Является ли то, что я придумаю приемлемым?

0
По вопросам рекламы [email protected]