working on Neo4j / graph database through php

4k Views Asked by At

I am working on a project for which I need work on graph database. So I have learnt basics of Neo4j (cypher language) .But I do not know how to access / query the database from php. Or suggest me any other way to work on graph database.

Help will be greatly appreciated.

composer.json

[
{
    "name": "monolog/monolog",
    "version": "1.13.1",
    "version_normalized": "1.13.1.0",
    "source": {
        "type": "git",
        "url": "https://github.com/Seldaek/monolog.git",
        "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
        "reference": "c31a2c4e8db5da8b46c74cf275d7f109c0f249ac",
        "shasum": ""
    },
    "require": {
        "neoxygen/neoclient": "~2.1"
    },
    "provide": {
        "psr/log-implementation": "1.0.0"
    },
    "require-dev": {
        "aws/aws-sdk-php": "~2.4, >2.4.8",
        "doctrine/couchdb": "~1.0@dev",
        "graylog2/gelf-php": "~1.0",
        "phpunit/phpunit": "~4.0",
        "raven/raven": "~0.5",
        "ruflin/elastica": "0.90.*",
        "swiftmailer/swiftmailer": "~5.3",
        "videlalvaro/php-amqplib": "~2.4"
    },
    "suggest": {
        "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
        "doctrine/couchdb": "Allow sending log messages to a CouchDB server",
        "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
        "ext-mongo": "Allow sending log messages to a MongoDB server",
        "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
        "raven/raven": "Allow sending log messages to a Sentry server",
        "rollbar/rollbar": "Allow sending log messages to Rollbar",
        "ruflin/elastica": "Allow sending log messages to an Elastic Search server",
        "videlalvaro/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib"
    },
    "time": "2015-03-09 09:58:04",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "1.13.x-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Monolog\\": "src/Monolog"
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Jordi Boggiano",
            "email": "[email protected]",
            "homepage": "http://seld.be"
        }
    ],
    "description": "Sends your logs to files, sockets, inboxes, databases and various web services",
    "homepage": "http://github.com/Seldaek/monolog",
    "keywords": [
        "log",
        "logging",
        "psr-3"
    ]
},
{
    "name": "guzzlehttp/streams",
    "version": "2.1.0",
    "version_normalized": "2.1.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/guzzle/streams.git",
        "reference": "f91b721d73f0e561410903b3b3c90a5d0e40b534"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/guzzle/streams/zipball/f91b721d73f0e561410903b3b3c90a5d0e40b534",
        "reference": "f91b721d73f0e561410903b3b3c90a5d0e40b534",
        "shasum": ""
    },
    "require": {
        "php": ">=5.4.0"
    },
    "require-dev": {
        "phpunit/phpunit": "~4.0"
    },
    "time": "2014-08-17 21:15:53",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.0-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "GuzzleHttp\\Stream\\": "src/"
        },
        "files": [
            "src/functions.php"
        ]
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Michael Dowling",
            "email": "[email protected]",
            "homepage": "https://github.com/mtdowling"
        }
    ],
    "description": "Provides a simple abstraction over streams of data (Guzzle 4+)",
    "homepage": "http://guzzlephp.org/",
    "keywords": [
        "Guzzle",
        "stream"
    ]
},
{
    "name": "guzzlehttp/guzzle",
    "version": "4.2.3",
    "version_normalized": "4.2.3.0",
    "source": {
        "type": "git",
        "url": "https://github.com/guzzle/guzzle.git",
        "reference": "66fd916e9f9130bc22c51450476823391cb2f67c"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/guzzle/guzzle/zipball/66fd916e9f9130bc22c51450476823391cb2f67c",
        "reference": "66fd916e9f9130bc22c51450476823391cb2f67c",
        "shasum": ""
    },
    "require": {
        "ext-json": "*",
        "guzzlehttp/streams": "~2.1",
        "php": ">=5.4.0"
    },
    "require-dev": {
        "ext-curl": "*",
        "phpunit/phpunit": "~4.0",
        "psr/log": "~1.0"
    },
    "suggest": {
        "ext-curl": "Guzzle will use specific adapters if cURL is present"
    },
    "time": "2014-10-05 19:29:14",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "4.2-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "GuzzleHttp\\": "src/"
        },
        "files": [
            "src/functions.php"
        ]
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Michael Dowling",
            "email": "[email protected]",
            "homepage": "https://github.com/mtdowling"
        }
    ],
    "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
    "homepage": "http://guzzlephp.org/",
    "keywords": [
        "client",
        "curl",
        "framework",
        "http",
        "http client",
        "rest",
        "web service"
    ]
},
{
    "name": "symfony/event-dispatcher",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/EventDispatcher.git",
        "reference": "687039686d0e923429ba6e958d0baa920cd5d458"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/687039686d0e923429ba6e958d0baa920cd5d458",
        "reference": "687039686d0e923429ba6e958d0baa920cd5d458",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9"
    },
    "require-dev": {
        "psr/log": "~1.0",
        "symfony/config": "~2.0,>=2.0.5",
        "symfony/dependency-injection": "~2.6",
        "symfony/expression-language": "~2.6",
        "symfony/phpunit-bridge": "~2.7",
        "symfony/stopwatch": "~2.3"
    },
    "suggest": {
        "symfony/dependency-injection": "",
        "symfony/http-kernel": ""
    },
    "time": "2015-05-02 15:21:08",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\EventDispatcher\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony EventDispatcher Component",
    "homepage": "https://symfony.com"
},
{
    "name": "symfony/dependency-injection",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/DependencyInjection.git",
        "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/DependencyInjection/zipball/137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
        "reference": "137bf489c5151c7eb1e4b7dd34a123f9a74b966d",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9"
    },
    "conflict": {
        "symfony/expression-language": "<2.6"
    },
    "require-dev": {
        "symfony/config": "~2.2",
        "symfony/expression-language": "~2.6",
        "symfony/phpunit-bridge": "~2.7",
        "symfony/yaml": "~2.1"
    },
    "suggest": {
        "symfony/config": "",
        "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
        "symfony/yaml": ""
    },
    "time": "2015-05-29 14:44:44",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\DependencyInjection\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony DependencyInjection Component",
    "homepage": "https://symfony.com"
},
{
    "name": "symfony/filesystem",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/Filesystem.git",
        "reference": "ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/Filesystem/zipball/ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba",
        "reference": "ae4551fd6d4d4f51f2e7390fbc902fbd67f3b7ba",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9"
    },
    "require-dev": {
        "symfony/phpunit-bridge": "~2.7"
    },
    "time": "2015-05-15 13:33:16",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\Filesystem\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony Filesystem Component",
    "homepage": "https://symfony.com"
},
{
    "name": "symfony/config",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/Config.git",
        "reference": "537e9912063e66aa70cbcddd7d6e6e8db61d98e4"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/Config/zipball/537e9912063e66aa70cbcddd7d6e6e8db61d98e4",
        "reference": "537e9912063e66aa70cbcddd7d6e6e8db61d98e4",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9",
        "symfony/filesystem": "~2.3"
    },
    "require-dev": {
        "symfony/phpunit-bridge": "~2.7"
    },
    "time": "2015-05-15 13:33:16",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\Config\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony Config Component",
    "homepage": "https://symfony.com"
},
{
    "name": "symfony/yaml",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/Yaml.git",
        "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/Yaml/zipball/4a29a5248aed4fb45f626a7bbbd330291492f5c3",
        "reference": "4a29a5248aed4fb45f626a7bbbd330291492f5c3",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9"
    },
    "require-dev": {
        "symfony/phpunit-bridge": "~2.7"
    },
    "time": "2015-05-02 15:21:08",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\Yaml\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony Yaml Component",
    "homepage": "https://symfony.com"
},
{
    "name": "symfony/console",
    "version": "v2.7.0",
    "version_normalized": "2.7.0.0",
    "source": {
        "type": "git",
        "url": "https://github.com/symfony/Console.git",
        "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/symfony/Console/zipball/7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
        "reference": "7f0bec04961c61c961df0cb8c2ae88dbfd83f399",
        "shasum": ""
    },
    "require": {
        "php": ">=5.3.9"
    },
    "require-dev": {
        "psr/log": "~1.0",
        "symfony/event-dispatcher": "~2.1",
        "symfony/phpunit-bridge": "~2.7",
        "symfony/process": "~2.1"
    },
    "suggest": {
        "psr/log": "For using the console logger",
        "symfony/event-dispatcher": "",
        "symfony/process": ""
    },
    "time": "2015-05-29 16:22:24",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.7-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Symfony\\Component\\Console\\": ""
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Fabien Potencier",
            "email": "[email protected]"
        },
        {
            "name": "Symfony Community",
            "homepage": "https://symfony.com/contributors"
        }
    ],
    "description": "Symfony Console Component",
    "homepage": "https://symfony.com"
},
{
    "name": "neoxygen/neoclient",
    "version": "2.2.3",
    "version_normalized": "2.2.3.0",
    "source": {
        "type": "git",
        "url": "https://github.com/neoxygen/neo4j-neoclient.git",
        "reference": "f7fc5f76c1273bfe7b7346cac29272dac3142ea2"
    },
    "dist": {
        "type": "zip",
        "url": "https://api.github.com/repos/neoxygen/neo4j-neoclient/zipball/f7fc5f76c1273bfe7b7346cac29272dac3142ea2",
        "reference": "f7fc5f76c1273bfe7b7346cac29272dac3142ea2",
        "shasum": ""
    },
    "require": {
        "guzzlehttp/guzzle": "4.*",
        "monolog/monolog": "~1.1",
        "php": ">= 5.4",
        "symfony/config": "~2.5",
        "symfony/console": "~2.5",
        "symfony/dependency-injection": "~2.5",
        "symfony/event-dispatcher": "~2.5",
        "symfony/yaml": "~2.5"
    },
    "require-dev": {
        "behat/behat": "~3.0",
        "bossa/phpspec2-expect": "*",
        "phpspec/phpspec": "~2.0",
        "phpunit/phpunit": "4.*"
    },
    "time": "2015-06-05 18:12:15",
    "type": "library",
    "extra": {
        "branch-alias": {
            "dev-master": "2.1-dev"
        }
    },
    "installation-source": "dist",
    "autoload": {
        "psr-4": {
            "Neoxygen\\NeoClient\\": "src/"
        }
    },
    "notification-url": "https://packagist.org/downloads/",
    "license": [
        "MIT"
    ],
    "authors": [
        {
            "name": "Christophe Willemsen",
            "email": "[email protected]"
        }
    ],
    "description": "NeoClient is the most advanced Http Client for Neo4j",
    "homepage": "http://neoxygen.io",
    "keywords": [
        "client",
        "cluster",
        "graph",
        "high-availibility",
        "neo4j"
    ]
}

]

2

There are 2 best solutions below

0
On

The page on Neo4J http://neo4j.com/developer/php/ has some links to PHP libraries you can use to interact with Neo4J.

For example, you could install this one here: https://github.com/neoxygen/neo4j-neoclient

You should read their intro on GitHub page that explains how to install it and how to make connection with the database (you can simply copy and paste their sample code).

After you've done this, you can then perform queries like

$q = 'MATCH (n:Actor) RETURN n.name';
$client->sendCypherQuery($q);
$result = $client->getRows();`

using Cypher that you already know from your PHP code.

If you want something even easier than that, try another library: just follow the instructions on https://github.com/neo4j-contrib/developer-resources/tree/gh-pages/language-guides/php/neo4jphp which is an example of a functioning PHP to Neo4J app.

Do everything as they say and then simply change the queries inside to the ones you need. This way you'll have your own PHP app without writing a line of PHP, if you find it difficult to use it.

5
On

As a quick start guide, using NeoClient is much like using Cypher, except you use the client method to send it :

Set Up The Client

Assuming you use 2.2 and your password is "password" :

<?php

require_once(__DIR__.'/vendor/autoload.php');

use Neoxygen\NeoClient\ClientBuilder;

$client = ClientBuilder::create()
->addConnection('default','http','localhost',7474,true,'neo4j','password')
->setAutoFormatResponse(true)
->build();

You can then send Cypher Queries with the client :

Sending Cypher

CREATING A NODE

$query = 'CREATE (user:User {name:"john"})';
$client->sendCypherQuery($query);

RETRIEVING THE NODE

$query = 'MATCH (user:User {name:"john"}) RETURN user';
$result = $client->sendCypherQuery()->getResult();
// accessing the user identifier (so the user node) from the result
$john = $result->get('user');

Managing Node objects

// The $john is a wrapped Node object and have some methods

// The node id
echo $john->getId();
// The labels
print_r($john->getLabels());
// The properties
echo $john->getProperty('name');

CREATING RELATIONSHIPS (with Cypher)

$query = 'MATCH (user:User {name:"john"})
CREATE (friend:User {name:"Judith"})
MERGE (user)-[r:FRIEND]->(friend)
RETURN user, friend, r';
$result = $client->sendCypherQuery($q)->getResult();

$john = $result->get('user');
$judith = $result->get('judith');

// What john has for relationships

print_r($john->getRelationships()); // returns relationships objects

// Get a node connected to john

print_r($john->getConnectedNode());

I think the README of the NeoClient repository is very much documentend, so I'll not rewrite everything here.