campoint/postgrest-php

PHP的PostgREST客户端。此库提供了一个同步和异步接口,用于访问PostgREST。

0.0.1 2023-07-24 13:06 UTC

This package is auto-updated.

Last update: 2024-09-26 20:04:29 UTC


README

License PHP version Code coverage Release Commit activity Documentation

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对象,但baseUrltimeout参数将被覆盖。

同步

为同步环境创建客户端

$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