Я работаю над проектом, для которого мне нужно работать с базой данных графа.
Итак, я изучил основы Neo4j (cypher language). Но я не знаю, как получить доступ к базе данных / запросить ее у php.
Или предложите мне другой способ работы с базой данных графа.
Помощь будет принята с благодарностью.
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"]
}
]
В качестве краткого руководства использование NeoClient очень похоже на использование Cypher, за исключением того, что вы используете метод client для его отправки:
Настройте клиента
Предполагая, что вы используете 2.2 и ваш пароль «пароль»:
<?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();
Затем вы можете отправить Cypher Queries с клиентом:
Отправка Сайфера
СОЗДАВАЯ УЗЕЛ
$query = 'CREATE (user:User {name:"john"})';
$client->sendCypherQuery($query);
ПОЛУЧЕНИЕ УЗЛА
$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');
Управление объектами Node
// 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');
СОЗДАНИЕ ОТНОШЕНИЙ (с Сайфером)
$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());
я думаю README из хранилища NeoClient очень хорошо документировано, поэтому я не буду здесь все переписывать.
Страница на Neo4J http://neo4j.com/developer/php/ имеет несколько ссылок на библиотеки PHP, которые вы можете использовать для взаимодействия с Neo4J.
Например, вы можете установить это здесь: https://github.com/neoxygen/neo4j-neoclient
Вы должны прочитать их введение на странице GitHub, в котором объясняется, как установить его и как установить соединение с базой данных (вы можете просто скопировать и вставить их пример кода).
После того, как вы сделали это, вы можете выполнить такие запросы, как
$q = 'MATCH (n:Actor) RETURN n.name';
$client->sendCypherQuery($q);
$result = $client->getRows();`
используя Cypher, который вы уже знаете из своего кода PHP.
Если вы хотите что-то еще проще, попробуйте другую библиотеку: просто следуйте инструкциям на https://github.com/neo4j-contrib/developer-resources/tree/gh-pages/language-guides/php/neo4jphp который является примером работающего приложения PHP для Neo4J.
Делайте все, как они говорят, а затем просто измените запросы внутри на те, которые вам нужны. Таким образом, у вас будет собственное приложение PHP без написания строки PHP, если вам трудно его использовать.