2016-09-22 4 views
0

Die unten zeigt: Marlena hat 12 Bilder (die im Grunde aus der Dokumentation ist)Zugriff auf Ergebnisse von Collect() mit Neo4j-php-Client

Wie greife ich auf die Daten in collect (Malerei) zB: Titel

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

ich anzeigen möchten:

Künstlername:

  • Malerei Titel
  • Malerei Titel
  • etc

Ich gehe davon aus diesen Daten entweder von Malerei oder Gemälde ziehen werden können. Ich bin mir nur nicht sicher, wie ich die Abfrage zusammenstellen soll. Es wird mit print_r und dem Datensatz angezeigt, damit ich weiß, dass die Daten durchkommen.

Antwort

0

a) Ich schlage vor, Sie Alias ​​Ihre Rückgabewerte, ist es einfacher, sie auf Treiberebene

b) Das Gemälde Rekordwert gibt ein Array von Node Objekten zu holen, so iterable ist, nicht nötig zu zählen macht die for-Schleife:

$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

Sehr geschätzt und es funktioniert, wie ich es erwartet hätte. Ich kann nicht anders, als zu denken, dass ich bei meinen ersten Tests etwas Einfaches verpasst haben muss. Weil das viel wie das aussieht, was ich versucht habe, als ich anfing. – Grant

1

Dies sollte für Sie arbeiten:

$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

Leider funktioniert das obige nicht und zeigt nur an, was ich ursprünglich hatte. Jill hat 1 Gemälde: Disha hat 7 Bilder: Marlena hat 12 Gemälde: Sandy hat 4 Bilder: – Grant

0

ich es immer endete mit folgendem zu arbeiten:

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

, die die folgende Ausgabe liefert:

Vorname Nachname gemalt :

  • Lumine - 86 Ansichten
  • Pooled Water - 69 Ansichten
  • Noch Lake - 125 Ansichten

Abschließende Hinweise ich tatsächlich versucht Code ähnlich dem, was Sie während meines Kampfes schlug diese Funktion zu erhalten. Ich bin ein bisschen verwirrt, warum nicht.

So bin ich links fragen. Ist das, was ich für akzeptabel halte?

+0

Der PHP-Client ein paar Helfer bietet für mit Ergebnisdatensätzen arbeiten, vor allem lesen https: // Github .com/graphaware/neo4j-php-client # handling-ergebnisse-von-v3-zu-v4 –

+0

Das jetzt 1000 mal gelesen. Nichts, was ich zusammengestellt habe, scheint den Trick zu machen, außer dem, was ich oben getan habe. – Grant

+0

Ich habe eine Antwort mit einer vereinfachten Version hinzugefügt –