public function traverse($relation, $depth = 1) { $traversal = new Traversal($this->client); $traversal->addRelationship($relation, Relationship::DirectionOut)->setPruneEvaluator(Traversal::PruneNone)->setReturnFilter(Traversal::ReturnAll)->setMaxDepth($depth); return $nodes = $traversal->getResults($startNode, Traversal::ReturnTypeNode); }
} // Find stores where the part was sold } else { if ($cmd == 'stores' && !empty($argv[2])) { $partName = $argv[2]; // Use the Cypher query language if (!empty($argv[3]) && $argv[3] == 'cypher') { $queryTemplate = "START part=node:parts3('name:{$partName}') " . "MATCH (store)-[:SOLD]->()-[:CONTAINS]->(part) " . "RETURN store, count(*)"; $query = new Cypher\Query($client, $queryTemplate); $result = $query->getResultSet(); echo "Found " . count($result) . " stores:\n"; foreach ($result as $row) { echo "* " . $row['store']->getProperty('name') . "\n"; } // Use javascript traversal } else { $part = $partsIndex->findOne('name', $partName); if (!$part) { die("{$partName} not found.\n"); } $traversal = new Traversal($client); $traversal->addRelationship('CONTAINS', Relationship::DirectionIn)->addRelationship('SOLD', Relationship::DirectionIn)->setMaxDepth(4)->setReturnFilter('javascript', '(position.length() > 0 && position.lastRelationship().getType() == "SOLD");'); $stores = $traversal->getResults($part, Traversal::ReturnTypeNode); echo "Found " . count($stores) . " stores:\n"; foreach ($stores as $store) { echo "* {$store->getProperty('name')}\n"; } } } } }