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);
 }
Example #2
0
        }
        // 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";
                }
            }
        }
    }
}