campoint / postgrest-php
PHP的PostgREST客户端。此库提供了一个同步和异步接口,用于访问PostgREST。
Requires
- php: ^8.1
- react/async: ^4.0
- react/http: ^1.5
Requires (Dev)
- phpmd/phpmd: ^2.13
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10
- symplify/easy-coding-standard: ^11
This package is auto-updated.
Last update: 2024-09-26 20:04:29 UTC
README
PHP的PostgREST客户端。此库提供了一个同步和异步接口,用于访问PostgREST。
目录
安装
需求
- PHP >= 8.1
- react/http >= 1.5
- react/async >= 4.0
- PostgreSQL >= 12
- PostgREST >= 9
说明
composer require campoint/postgrest-php
基本用法
创建客户端
此库提供了异步和同步客户端。底层我们使用ReactPHP来调度请求,同步客户端和异步客户端之间的唯一区别是,同步客户端会自动在Promise
上调用await()
。您可以可选地向客户端传递一个配置好的Browser
对象,但baseUrl
和timeout
参数将被覆盖。
同步
为同步环境创建客户端
$clientAuthConfig = new ClientAuthConfig( authArguments: [ 'email' => 'test@acme.dev', 'pass' => 'password', ], ); $client = new PostgrestSyncClient( 'https://:8080', 5, clientAuthConfig: $clientAuthConfig ); try { $client->auth(); } catch (FailedAuthException $e) { // do something }
异步
为异步环境创建客户端
$clientAuthConfig = new ClientAuthConfig( authArguments: [ 'email' => 'test@acme.dev', 'pass' => 'password', ], ); $client = new PostgrestAsyncClient( 'https://:8080', 5, (new Browser(null, $loop)), $clientAuthConfig ); $client->auth()->then( function () { // do something on success }, function (FailedAuthException $e) { // do something on rejection } );
选择
从任何模式中的任何表中选择数据,并应用任意过滤器
$response = $client->run( $client->from('schema_name', 'table_name') ->select('column_a', 'column_b') ->eq('column_c', 'foo') ->gt('column_d', 0.5) ->in('column_e', 1, 2, 3) );
插入
向任何模式中的任何表插入数据
$response = $client->run( $client->from('schema_name', 'table_name') ->insert( [ [ 'column_a' => 'foo' ], [ 'column_a' => 'bar' ] ] ) );
更新插入
向任何模式中的任何表更新插入数据
$response = $client->run( $client->from('schema_name', 'table_name') ->upsert( [ [ 'column_a' => 'foo' ], [ 'column_a' => 'bar' ] ], duplicateResolution: DuplicateResolution::MERGE ) );
更新
使用任意过滤器更新任何模式中的任何表中的任意行
$response = $client->run( $client->from('schema_name', 'table_name') ->update(['column_a' => 'foo']) ->eq('column_a', 'bar') );
删除
使用任意过滤器删除任何模式中的任何表中的任意行
$response = $client->run( $client->from('schema_name', 'table_name') ->delete() ->eq('column_a', 'bar') );
调用存储过程
使用任意参数调用任意存储过程
$response = $client->call( 'foobar', [ 'arg1' => 'foo', 'arg2' => 'bar' ], 'schema_name' );
高级用法
如果您需要有关如何使用此库的进一步文档,请参阅位于此处的文档。
创建问题
在遇到此库的bug时,请随时打开一个新问题。为了提高对您问题的理解,您应该fork此存储库并附加一个新的失败的测试用例,该测试用例代表bug。如果需要,可以在testing_db/initdb
路径下创建新的测试数据库。在问题中引用您的新测试。没有附加测试用例的问题报告可能会被忽略。请还提供使用的PostgREST和PostgreSQL版本,以简化问题复现的任务。只有当您打算自己实现它们时,才创建功能请求问题。
本地开发和测试
在开发或测试客户端时,您可以使用预先配置的docker-compose
环境来运行PostgreSQL和PostgREST。`docker-compose.yml`文件包含从版本12到15的PostgreSQL服务和版本9到11的PostgREST服务。要启动本地环境,只需运行
docker-compose up postgresql14 postgrest11
环境启动后,您可以通过端口8080
访问PostgREST,通过端口5432
访问PostgreSQL。
本地开发
该存储库提供了一个devcontainer,您可以使用它来开发客户端。开发仅在PR上进行,因为我们希望保持master稳定,并且始终可用于新功能。当向master打开PR时,将执行所有必要的检查和测试,以确保没有出错。为了确保您的PR不会因为linter或静态分析器的检查而失败,在打开PR之前运行以下命令
composer ci-ready
测试
此客户端使用docker-compose
进行集成测试,以运行所需的依赖项。要本地运行测试,请执行以下步骤
docker-compose up -d postgresql14 postgrest11 composer test