Neo4jグラフデータベースに接続する場合は各言語用に用意されたドライバー(ライブラリ)を使用します。公式にサポートされている言語には、Java、.NET、Javascript、Go、Python、そしてNode.jsがありますが、それ以外の次の言語は公式ではありませんがコミュニティーでサポートされており、Ruby、PHP、Perl、Rustなどが挙げられます。
本記事ではコミュニティーでサポートされているPHPドライバー(Laudis)を使ってNeo4jに接続してデータを取得する方法を学習していきます。本記事はEC2インスタンスが立ち上がっていてSSH接続できている状態を前提として解説していきますので、学習がまだの方は「EC2インスタンスの作成手順」と「WindowsからSSH接続を行う方法」の学習を終えてからこちらの戻ってきてください。
公式サイトの紹介ページ
https://neo4j.com/docs/getting-started/languages-guides/community-drivers
LaudisドライバーのGitHubリポジトリ
https://github.com/neo4j-php/neo4j-php-client
Laudis PHPドライバーのインストール
ここではLaudis PHPドライバーをインストールにComposerを使用します。Composer自体のインストール方法については以下の記事を参考にしてください。

PHPのプロジェクトフォルダ内で以下のコマンドを実行してLaudis PHPドライバーをインストールします。
【例】
sudo mkdir -p /var/www/lib
sudo chown -R apache:ec2-user /var/www
sudo chmod -R g+w /var/www
cd /var/www/lib
sudo -u ec2-user composer require laudis/neo4j-php-client
Neo4jへの接続
Neo4jデータベースを用意する
AuraDBを使用する場合
Neo4jのクラウドサービスのAuraDBを使用する場合は以下の記事を参考にNeo4jのインスタンスを用意してください。本記事ではサンプルデータセットは使用しないので、空のデータベースのまま次に進んでください。

Neo4jデータベースサーバを自前で用意する場合
Neo4jのデータベースサーバを自分で立てる場合は以下の記事を参考にNeo4jのサーバを用意して下さい。

Webサーバを立てる
Webサーバを立てる場合は以下の記事を参考にして下さい。
「Apache(アパッチ)サーバのインストールと設定、そしてHTTPS化」
「PHPをインストールしてコマンドラインとブラウザでPHPを実行する」
Neo4jへの接続とCypherクエリを試す
また、以下の例で使用されているクエリの詳細については「Neoj4|Cypherクエリ基礎編(CRUD+制約とインデックス)」を参考にしてください。それぞれクエリのコメント個所を一つずつアンコメントに入れ替えて、データの挿入や取得を試してみてください。
<?php
require_once('../vendor/autoload.php');
try {
//$connection_url = 'bolt+s://neo4j:パスワード@ホスト名';
//AuraDBのホスト名は以下の様なホスト名になります。
$connection_url = 'bolt+s://neo4j:パスワード@f******d.databases.neo4j.io';
$client = Laudis\Neo4j\ClientBuilder::create()
->withDriver('bolt+s', $connection_url)
->build();
} catch(Exception $e) {
$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
var_dump($err_msg);
exit;
}
$movie_id = 1;
//以下コメントを入れ替えてそれぞれ順番に実行してください。
/*
//一意制約の設定
try {
$cypher = "";
$cypher .= " CREATE CONSTRAINT ConstraintUniqueMovieMovieId FOR (n:Movie) REQUIRE n.movie_id IS UNIQUE ";
$cypher .= " ; ";
$statement = new Laudis\Neo4j\Databags\Statement($cypher, []);
$result = $client->runStatement($statement);
} catch (Exception $e) {
$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
var_dump($err_msg);
exit;
}
*/
/*
//データのインサート
try {
$cypher = "";
$cypher .= " MERGE (m:Movie {movie_id: 1}) ";
$cypher .= " SET m.update_date = datetime() ";
$cypher .= " RETURN m.movie_id AS movie_id, m.update_date AS update_date ";
$cypher .= " ; ";
$statement = new Laudis\Neo4j\Databags\Statement($cypher, []);
$result = $client->runStatement($statement);
} catch (Exception $e) {
$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
var_dump($err_msg);
exit;
}
*/
/*
//データの読みだし
try {
$cypher = "";
$cypher .= " MATCH (m:Movie) ";
$cypher .= " WHERE m.movie_id = \$movie_id ";
$cypher .= " RETURN ";
$cypher .= " m.movie_id AS movie_id ";
$cypher .= " , apoc.date.format(toInteger(m.update_date.epochSeconds), 's', 'yyyy-MM-dd HH:mm:ss') AS update_date ";
$cypher .= " ; ";
$statement = new Laudis\Neo4j\Databags\Statement($cypher, [
'movie_id' => $movie_id,
]);
$result = $client->runStatement($statement);
foreach($result as $row) {
echo $row->get('movie_id').' : '.$row->get('update_date');
}
} catch (Exception $e) {
$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
var_dump($err_msg);
exit;
}
*/
/*
//データの削除
try {
$cypher = "";
$cypher .= " MATCH (m:Movie) ";
$cypher .= " WHERE m.movie_id = \$movie_id ";
$cypher .= " DELETE m ";
$cypher .= " ; ";
$statement = new Laudis\Neo4j\Databags\Statement($cypher, [
'movie_id' => $movie_id,
]);
$result = $client->runStatement($statement);
} catch (Exception $e) {
$err_msg = "Exception: ".$e->getLine()." : ".$e->getMessage();
var_dump($err_msg);
exit;
}
*/
?>
Cypherクエリ内の変数のプレースホルダー名にはバックスラッシュ(\)が必要です。
まとめ
今回はNeo4jのデータベースに接続するのに、LaudisのPHPドライバーを使用する方法を学習しました。Laudis PHPドライバーはコミュニティーサポートのライブラリでしたね。Composerを使ってインストールしました。接続のテストにはNeo4jのクラウドサービスAuraDBを使用しました。Webサーバを用意して、それからPHPのコードを試しました。Neo4に接続した後は、Cypherクエリでユニーク制約の設定、データのインサート、読み出し、削除をそれぞれ確認しました。総合的な設定スキルが必要になってきました。記事内の各のリンク記事もよく復習しておきましょう。