2016-09-22 1 views
0

Les affichages ci-dessous: Marlena a 12 tableaux (ce qui est essentiellement de la documentation)Accès aux résultats de Collect() en utilisant Neo4j-php-client

Comment puis-je accéder aux données dans collect (Peintures) ex: titre

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

Je voudrais afficher:

Nom de l'artiste:

  • titre de peinture
  • Titre de la peinture
  • etc

Je suppose ces données peuvent être tirer de peinture ou des peintures. Je ne suis pas sûr de savoir comment mettre en place la requête. Il affichera en utilisant print_r et l'enregistrement afin que je sache que les données arrivent.

Répondre

0

a) Je vous suggère alias vos valeurs de retour, il est plus facile de les chercher au niveau du pilote

b) La peinture valeur record retourne un tableau de Node objets, est donc itératives, pas besoin de compter pour faire la boucle 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

Très apprécié et il fonctionne comme je l'espérais. Je ne peux pas m'empêcher de penser que j'ai dû manquer quelque chose de simple lors de mes premiers tests. Parce que ça ressemble beaucoup à ce que j'ai essayé quand j'ai commencé. – Grant

1

Cela devrait fonctionner pour vous:

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

Malheureusement, ce qui précède ne fonctionne pas et n'affiche que ce que j'avais initialement. Jill a 1 peintures: Disha a 7 tableaux: Marlena possède 12 peintures: Sandy a 4 tableaux: – Grant

0

J'ai fini par le faire fonctionner avec les éléments suivants:

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

qui fournit la sortie suivante:

Nom Prénom peint :

  • Lumine - 86 vues
  • Pooled eau - 69 vues
  • Still Lake - 125 vues

Notes finales I Code vraiment essayé semblable à ce que vous suggérez au cours de ma lutte pour obtenir ce travail. Je suis un peu confus pourquoi ce n'est pas le cas.

Alors je me demande encore. Est-ce que ce que je viens avec acceptable?

+0

Le client php offre quelques aides pour travailler avec des ensembles de résultats, en particulier lire https: // github .com/graphaware/neo4j-php-client # gestion-résultats-de-v3-à-v4 –

+0

Lisez-le 1000 fois maintenant. Rien de ce que j'ai mis ensemble ne semble faire l'affaire sauf ce que j'ai fait ci-dessus. – Grant

+0

J'ai ajouté une réponse avec une version simplifiée –