As the original repository was discontinued this is the continuing package to work with.
Gremlin is a graph traversal language developed by Apache TinkerPop.
Many graph vendors like Neo4j, Azure Cosmos, AWS Neptune and many more supports Gremlin.
This package provides a basic integration of gremlin for php applications.
This version is built from TinkerPop v3.6.1.
composer require specialweb/gremlin-dsl
This packages provides a static Configuration Class with some configuration options.
Option | Scope | Type | Default | Description |
---|---|---|---|---|
GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS | Constant | boolean | false | Globally register short-functions for gremlin. E.g. the global g -function will be available to start the traversal. |
enableShortFunctions | Configuration | boolean | false | Globally register short-functions for gremlin. E.g. the global g -function will be available to start the traversal. |
sendClosure | Configuration | Closure | null | Register a global callback for the pseudo send step |
You can either configure it from array:
use SpecialWeb\GremlinDSL\Configuration;
/** @var \Brightzone\GremlinDriver\Connection $connection */
$connection = null;
Configuration::fromConfig([
'sendClosure' => function (string $traversalString) use ($connection) {
return $connection->send($traversalString);
},
'enableShortFunctions' => true,
]);
or set the desired settings directly:
use SpecialWeb\GremlinDSL\Configuration;
/** @var \Brightzone\GremlinDriver\Connection $connection */
$connection = null;
Configuration::getInstance()
->setSendClosure(function (string $traversalString) use ($connection) {
return $connection->send($traversalString);
})
->enableShortFunctions()
;
Just install the package and begin traversing.
<?php
require_once 'vendor/autoload.php';
echo \SpecialWeb\GremlinDSL\Traversal\GraphTraversal::g()
->V(1)->out('knows')->has('age', new \SpecialWeb\GremlinDSL\Traversal\Predicates\Gt(30))->values('name');
# g.V(1).out("knows").has("age", gt(30)).values("name")
There is a pseudo send
step provided with this package.
You can either globally configure a closure for the send step or provide it with every call.
<?php
require_once 'vendor/autoload.php';
use SpecialWeb\GremlinDSL\Configuration;
/** @var \Brightzone\GremlinDriver\Connection $connection */
$connection = null;
$sendClosure = function (string $traversalString) use ($connection) {
return $connection->send($traversalString);
};
Configuration::getInstance()->setSendClosure($sendClosure);
g()->V(1)->out("knows")->has("age", gt(30))->values("name")->send();
# or
g()->V(1)->out("knows")->has("age", gt(30))->values("name")->send($sendClosure);
Instead of a closure you can also provide an instance of SendClosureInterface.
use SpecialWeb\GremlinDSL\Traversal\SendClosureInterface;
use SpecialWeb\GremlinDSL\Traversal\GraphTraversalInterface;
class SendClosure implements SendClosureInterface
{
public function __invoke(GraphTraversalInterface $graphTraversal, string $traversalString) {
// handle the send
}
}
Short functions are simplifying the graph traversal generation and usage of predicates.
You've to enable GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS
,
manually load e.g. resources/predicates.php
or call Configuration::enableShortFunctions()
to make short functions available.
<?php
require_once 'vendor/autoload.php';
\SpecialWeb\GremlinDSL\Configuration::getInstance()->enableShortFunctions();
g()->V(1)->out('knows')->has('age', gt(30))->values('name');
# g.V(1).out("knows").has("age", gt(30)).values("name")
With GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS
constant:
<?php
define('GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS', true);
require_once 'vendor/autoload.php';
# With GREMLIN_DSL_REGISTER_GLOBAL_FUNCTIONS enabled:
g()->V(1)->out('knows')->has('age', gt(30))->values('name');
# g.V(1).out("knows").has("age", gt(30)).values("name")
The DSL generation is based on the java base-classes.
To (re)generate the DSL just call make generate
that will first generate the JSON methods structure and afterwards the php file generation.
Just call make generate-json
or mvn -f generator -P glv-json compile
To e.g. adjust the php file generation you can either call php generate.php [dsl:generate [<in-file>]]
or make generate-php