neo4j php client

2025-12-07 0 132

neo4j php client驱动程序

控制世界最强大的图形数据库

  • 通过简单的配置选择并选择驱动程序
  • 直观的API
  • 可扩展
  • 在官方的Neo4J驾驶员团队的密切监督下设计,建造和测试
  • 用TestKit验证
  • 用诗篇完全键入
  • 可用的螺栓,HTTP和自动路由驱动器

看到驾驶员在行动

  • 类电影数据库的实现。它使用Slim和Neo4J-PHP-Client为经典电影的Neo4J示例构建API。
  • 完整的现实示例实现。它使用Laravel实施现实世界示例项目,即所有演示应用程序的母亲
  • Friends API为世界上最老套的示例项目提供了NEO4J的力量。

有关一些更详细的文章,您可以参考这些博客文章:

  • 如何使用Neo4J,PHP和Open API构建JSON RESTFUL API
  • 使用Neo4J,AuradB和PHP构建网络应用
  • 使用PHP连接到Neo4J
  • 企业级PHP和NEO4J

或观看这些视频中的任何一个。

以三个简单的步骤开始您的驾驶体验

步骤1:通过作曲家安装

composer require laudis/neo4j-php-client

在此处找到更多详细信息

步骤2:创建客户

 use Laudis \\ Neo4j \\ Authentication \\ Authenticate ;
use Laudis \\ Neo4j \\ ClientBuilder ;

$ client = ClientBuilder:: create ()
    -> withDriver ( \' bolt \' , \' bolt+s://user:password@localhost \' ) // creates a bolt driver
    -> withDriver ( \' https \' , \' https://t**e*st.com \' , Authenticate:: basic ( \' user \' , \' password \' )) // creates an http driver
    -> withDriver ( \' neo4j \' , \' neo4j://neo4j.test.com?database=my-database \' , Authenticate:: oidc ( \' token \' )) // creates an auto routed driver with an OpenID Connect token
    -> withDefaultDriver ( \' bolt \' )
    -> build ();

您现在已经使用Bolt,HTTPS和Neo4J驱动程序创建了一个客户端。客户端将使用的默认驱动程序是螺栓

阅读有关URL以及如何使用它们在此处配置驱动程序的更多信息。

步骤3:运行交易

 use Laudis \\ Neo4j \\ Contracts \\ TransactionInterface ;

$ result = $ client -> writeTransaction ( static function ( TransactionInterface $ tsx ) {
    $ result = $ tsx -> run ( \' MERGE (x {y: \"z\"}:X) return x \' );
    return $ result -> first ()-> get ( \' x \' )[ \' y \' ];
});

echo $ result ; // echos \'z\' 

决定如何发送您的电视机查询

您可以使用三种不同的方法控制驱动程序:

  • 自动构成的查询(最简单,最直观)
  • 事务功能(最便携)
  • 不受管理的交易(最高控制程度)

自动提交的查询

自动犯罪查询是最直接,最直观的问题,但是在运行复杂的业务逻辑或在高可用性环境中时具有许多缺点。

运行一个简单的密码查询

 $ client -> run (
    \' MERGE (user {email: $email}) \' , //The query is a required parameter
    [ \' email \' => \' abc@hotmail.com \' ],  //Requests can be optionally added
    \' backup \' //The default connection can be overridden
);

运行语句对象:

 use Laudis \\ Neo4j \\ Databags \\ Statement ;

$ statement = new Statement ( \' MERGE (user {email: $email}) \' , [ \' email \' => \' abc@hotmail.com \' ]);
$ client -> runStatement ( $ statement , \' default \' );

一次运行多个查询

runStatements方法将一次运行所有语句。此方法是减少数据库调用数量的必不可少的工具,尤其是在使用HTTP协议时。

 use Laudis \\ Neo4j \\ Databags \\ Statement ;

$ results = $ client -> runStatements ([
    Statement:: create ( \' MATCH (x) RETURN x LIMIT 100 \' ),
    Statement:: create ( \' MERGE (x:Person {email: $email}) \' , [ \' email \' => \' abc@hotmail.com \' ])
]);

交易功能

交易功能是使用驱动程序时事实上的标准。它是最容易发生的,因为它首先使用高可用性解决方案(例如Neo4J Aura或cluster)进行了抗性。

驾驶员管理事务功能:

  • 在瞬态误差的情况下,它重新执行该功能。
  • 它在成功执行时承担交易
  • 在超时的情况下,它会回滚交易。
  • 当启用NEO4J协议时,它将执行路由到相关的追随者或领导者服务器。

注意:由于具有自动重试功能,该功能应在随后的召回中产生相同的结果,或者以更多的技术方式:应该是愿意的。在函数中设计执行逻辑时,请务必记住这一点。

一些例子:

 use Laudis \\ Neo4j \\ Contracts \\ TransactionInterface ;

// Do a simple merge and return the result
$ result = $ client -> writeTransaction ( static function ( TransactionInterface $ tsx ) {
    $ result = $ tsx -> run ( \' MERGE (x {y: \"z\"}:X) return x \' );
    return $ result -> first ()-> get ( \' x \' )[ \' y \' ];
});

// Will result in an error
$ client -> readTransaction ( static function ( TransactionInterface $ tsx ) {
    $ tsx -> run ( \' MERGE (x {y: \"z\"}:X) return x \' );
});

// This is a poorly designed transaction function
$ client -> writeTransaction ( static function ( TransactionInterface $ tsx ) use ( $ externalCounter ) {
    $ externalCounter -> incrementNodesCreated ();
    $ tsx -> run ( \' MERGE (x {y: $id}:X) return x \' , [ \' id \' => Uuid:: v4 ()]);
});

// This achieves the same effect but is safe in case it should be retried. The function is now idempotent.
$ id = Uuid:: v4 ();
$ client -> writeTransaction ( static function ( TransactionInterface $ tsx ) use ( $ id ) {
    $ tsx -> run ( \' MERGE (x {y: $id}:X) return x \' , [ \' id \' => $ id ]);
});
$ externalCounter -> incrementNodesCreated ();

不受管理的交易

如果您需要低级访问驾驶员的功能,则需要非托管的交易。它们允许完全可控的提交和回滚。

打开交易

beginTransaction方法将与相关驱动程序启动交易。

 use Laudis \\ Neo4j \\ Databags \\ Statement ;

$ tsx = $ client -> beginTransaction (
    // This is an optional set of statements to execute while opening the transaction
    [Statement:: create ( \' MERGE (x:Person({email: $email}) \' , [ \' email \' => \' abc@hotmail.com \' ])],
    \' backup \' // This is the optional connection alias
);

请注意, beginTransaction仅返回交易对象,而不返回所提供的语句的结果。

交易中的运行语句

只要客户对象仍然打开,该事务就可以像客户端对象一样运行语句。

 $ result = $ tsx -> run ( \' MATCH (x) RETURN x LIMIT 100 \' );
$ result = $ tsx -> runStatement (Statement:: create ( \' MATCH (x) RETURN x LIMIT 100 \' ));
$ results = $ tsx -> runStatements ([Statement:: create ( \' MATCH (x) RETURN x LIMIT 100 \' )]);

完成交易

回滚交易:

 $ tsx -> rollback ();

进行交易:

 $ tsx -> commit ([Statement:: create ( \' MATCH (x) RETURN x LIMIT 100 \' )]);

访问结果

结果以行和列的标准格式返回:

 // Results are a CypherList
$ results = $ client -> run ( \' MATCH (node:Node) RETURN node, node.id AS id \' );

// A row is a CypherMap
foreach ( $ results as $ result ) {
    // Returns a Node
    $ node = $ result -> get ( \' node \' );

    echo $ node -> getProperty ( \' id \' );
    echo $ result -> get ( \' id \' );
}

Cypher值和类型映射到这些PHP类型和类:

暗号 php
无效的 * null
细绳 * string
整数 * int
漂浮 * float
布尔 * bool
地图 * \\Laudis\\Neo4j\\Types\\CypherMap
列表 * \\Laudis\\Neo4j\\Types\\CypherList
观点 * \\Laudis\\Neo4j\\Contracts\\PointInterface **
日期 * \\Laudis\\Neo4j\\Types\\Date
时间 * \\Laudis\\Neo4j\\Types\\Time
本地时间 * \\Laudis\\Neo4j\\Types\\LocalTime
DateTime * \\Laudis\\Neo4j\\Types\\DateTime
DateTimeZoneID * \\Laudis\\Neo4j\\Types\\DateTimeZoneId
LocalDateTime * \\Laudis\\Neo4j\\Types\\LocalDateTime
期间 * \\Laudis\\Neo4j\\Types\\Duration
节点 \\Laudis\\Neo4j\\Types\\Node
关系 \\Laudis\\Neo4j\\Types\\Relationship
小路 \\Laudis\\Neo4j\\Types\\Path

(*)这些项目也可以用作螺栓协议中的参数,并将自动由驱动程序转换,因此可以在Cypher中使用。

除这些示例外, \\DateTimeInterface还将在Cypher中映射到DateTimeZoneId 。空或列表类型array将转换为Cypher List ,并将associative array转换为map

(**)一个点可以是实现点接口的四个类型之一: \\Laudis\\Neo4j\\Types\\CartesianPoint \\Laudis\\Neo4j\\Types\\Cartesian3DPoint \\Laudis\\Neo4j\\Types\\WGS84Point \\Laudis\\Neo4j\\Types\\WGS843DPoint

潜水更深

区分参数类型

Cypher具有列表和地图。由于标准PHP阵列都封装了这两者,因此这个概念可能是有问题的。当您提供一个空数组作为参数时,将不可能确定一个空列表或映射。

ParameterHelper类是这样的理想伴侣:

 use Laudis \\ Neo4j \\ ParameterHelper ;

$ client -> run ( \' MATCH (x) WHERE x.slug in $listOrMap RETURN x \' , [ \' listOrMap \' => ParameterHelper:: asList ([])]); // will return an empty CypherList
$ client -> run ( \' MATCH (x) WHERE x.slug in $listOrMap RETURN x \' , [ \' listOrMap \' => ParameterHelper:: asMap ([])]); // will error
$ client -> run ( \' MATCH (x) WHERE x.slug in $listOrMap RETURN x \' , [ \' listOrMap \' => []]); // will return an empty CypherList

版本兼容性矩阵

驱动程序版本 PHP版本 neo4j版本
^2.8 7.4, ^8.0 ^3.5, ^4.0
^3.0 ^8.0 ^4.0, ^5.0

NEO4J功能支持

特征 支持?
验证 是的
交易 是的
HTTP协议 是的
螺栓协议 是的
是的
光环 是的
震动协议 是的
书签 是的

深入要求

  • php> = 7.4
  • NEO4J数据库(最低版本3.5)
  • EXT-BCMATH *
  • ext-json **
  • Ext-sockets ***

(*)需要实施螺栓协议

(**)实现HTTP协议需要

(***)可以安装以进行最佳螺栓协议性能

如果您打算使用HTTP驱动程序,请确保项目中包含的PSR-7,PSR-17和PSR-18实现。如果没有,则可以通过作曲家安装它们:

composer require nyholm/psr7 nyholm/psr7-server kriswallsmith/buzz

结果格式/水合

为了制定螺栓协议和HTTP统一的结果,驾驶员提供并总结了结果。

默认格式是\\Laudis\\Neo4j\\Formatters\\SummarizedResultFormatter ,它在结果格式部分中进行了广泛的解释。

\\Laudis\\Neo4j\\Formatter\\SummarizedResultFormatter添加了广泛的结果摘要。

客户端构建器提供了一种更改格式器的简便方法:

 $ client = \\ Laudis \\ Neo4j \\ClientBuilder:: create ()-> build ();

/**
 * The client will now return a result, decorated with a summary.
 *
 * @var \\Laudis\\Neo4j\\Databags\\SummarizedResult $results
 */
$ summarisedResult = $ client -> run ( \' MATCH (x) RETURN x \' );

// The summary contains extensive information such as counters for changed values in the database,
// information on the database, potential notifications, timing, a (profiled) plan, the type of query
// and information on the server itself.
$ summary = $ summarisedResult -> getSummary ();
// The result is exactly the same as the default.
$ result = $ summarisedResult -> getResult ();

概念

此处描述的驱动程序API是驱动程序的主要目标。因此,客户只不过是驾驶员经理。驾驶员创建会议。会话通过交易进行查询。

由于这种行为,您可以从客户端开始访问每个概念:

 use Laudis \\ Neo4j \\ ClientBuilder ;

// A builder is responsible for configuring the client on a high level.
$ builder = ClientBuilder:: create ();
// A client manages the drivers as configured by the builder.
$ client = $ builder -> build ();
// A driver manages connections and sessions.
$ driver = $ client -> getDriver ( \' default \' );
// A session manages transactions.
$ session = $ driver -> createSession ();
// A transaction is the atomic unit of the driver where are the cypher queries are chained.
$ transaction = $ session -> beginTransaction ();
// A transaction runs the actual queries
$ transaction -> run ( \' MATCH (x) RETURN count(x) \' );

如果需要完整的控制,则可以使用自定义配置对象控制每个对象。

客户

客户根据预配置的别名管理驱动程序并将查询路由到正确的驱动程序。

司机

驱动器对象是可访问neo4j的线程安全主干。它拥有一个连接池,可以产生会话以进行工作。

 use Laudis \\ Neo4j \\ Basic \\ Driver ;
use Laudis \\ Neo4j \\ Databags \\ DriverConfiguration ;

$ driver = Driver:: create (
    uri: \' neo4j://user:mypassword@Localhost:7687 \' ,
    configuration: DriverConfiguration:: create ()-> withUserAgent ( \' MyApp/1.0.0 \' )
);

会议

会话是用于因果链接交易序列的轻巧容器。他们根据需要从连接池借用连接,并使用书签借用链交易。

 use Laudis \\ Neo4j \\ Databags \\ SessionConfiguration ;
use Laudis \\ Neo4j \\ Enum \\ AccessMode ;

$ session = $ driver -> createSession (SessionConfiguration:: create ()
    -> withDatabase ( \' my-database \' )
    -> withAccessMode (AccessMode:: READ ())
);

交易

交易是可能包含一个或多个查询的工作单位。每个交易都与单个连接结合,并通过书签在因果链中表示。

陈述

查询交易中的可执行单元,由一个Cypher String和一个键入参数集组成。每个查询都输出可能包含零或更多记录的结果

结果

结果包含来自查询的输出,由标头元数据,内容记录和摘要元数据组成。在NEO4J 4.0及更高版本中,应用程序可以控制结果数据流。

深入配置

URL方案

URL方案是配置驱动程序的最简单方法。

配置格式:

 \'<scheme>://<user>:<password>@<host>:<port>?database=<database>\'

默认配置:

 bolt://localhost:7687?database=neo4j

方案配置矩阵

该库支持三个驱动程序:Bolt,HTTP和Neo4J。 URL的方案一部分确定驱动程序。

司机 方案 有效证书 自签名证书 功能
neo4j neo4j neo4j+s neo4j+ssc 客户侧路由螺栓
螺栓 螺栓 螺栓+s 螺栓+SSC 单螺栓上的单个服务器
http http https 通过PSR客户端实现配置 http上的单个服务器

配置对象

可以使用配置对象配置驱动程序,会话和事务。可以在此处找到配置选项的概述:

姓名 概念 描述 班级
用户代理 司机 用户代理用于将客户端识别为Neo4J服务器。 DriverConfiguration
HTTP PSR结合 司机 使用HTTP协议时,驱动程序使用的相关PSR实现。 DriverConfiguration
数据库 会议 要连接的数据库。 SessionConfiguration
提取大小 会议 立即获取的行量。 SessionConfiguration
访问模式 会议 访问服务器时的默认模式。 SessionConfiguration
书签 会议 会议中使用的书签。 (实验) SessionConfiguration
元数据 交易 交易期间使用的元数据。 (实验) TransactionConfiguration
暂停 交易 预时之前的最长时间。 TransactionConfiguration

代码示例:

 use \\ Laudis \\ Neo4j \\ Databags \\ DriverConfiguration ;
use Laudis \\ Neo4j \\ Databags \\ SessionConfiguration ;
use Laudis \\ Neo4j \\ Databags \\ TransactionConfiguration ;

$ client = \\ Laudis \\ Neo4j \\ClientBuilder:: create ()
    -> withDefaultDriverConfiguration (DriverConfiguration:: default ()-> withUserAgent ( \' MyApp/1.0.0 \' ))
    -> withDefaultSessionConfiguration (SessionConfiguration:: default ()-> withDatabase ( \' app-database \' ))
    -> withDefaultTransactionConfiguration (TransactionConfiguration:: default ()-> withTimeout ( 5.0 ))
    -> build ();

// The client will run the query on a driver with the provided config,
// which spawns a session with the provided session config
// and runs the query in a transaction with the provided transaction config
$ client -> run ( \' MATCH (x) RETURN count(x) AS count \' );

// More granular control can be achieved by requesting the concepts yourself:
$ tsx = $ client -> getDriver ( \' default \' )
    -> createSession (SessionConfiguration:: default ()-> withDatabase ( \' management-database \' ))
    -> beginTransaction ( null , TransactionConfiguration:: default ()-> withTimeout ( 200 ));

$ tsx -> run ( \' SOME REALLY LONG MANAGEMENT QUERY \' );

$ tsx -> commit ();

下载源码

通过命令行克隆项目:

git clone https://github.com/neo4j-php/neo4j-php-client.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 开发教程 neo4j php client https://www.zuozi.net/31866.html

POPForums
上一篇: POPForums
gofcgi
下一篇: gofcgi
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务