ctmalder/firestore-php

Firestore PHP 客户端

dev-master 2024-04-10 10:45 UTC

This package is not auto-updated.

Last update: 2024-09-26 11:28:46 UTC


README

Latest Version on Packagist Total Downloads License

此包完全基于 Firestore REST API

身份验证 / 生成 API 密钥

  1. 访问 Google Cloud Firestore API
  2. 选择您的项目。
  3. 从左侧菜单选择 凭据,然后从服务器密钥中选择 API 密钥创建自己的凭据

安装

您可以通过 composer 安装此包

composer require ahsankhatri/firestore-php

或者将其添加到 composer.json 中,然后运行 composer update

"require": {
    "ahsankhatri/firestore-php": "^2.0",
}

依赖项

绑定需要以下扩展才能正常工作

如果您使用 Composer,这些依赖项应该会自动处理。如果您手动安装,请确保这些扩展可用。

用法

初始化

$firestoreClient = new FirestoreClient('project-id', 'AIzaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', [
    'database' => '(default)',
]);

添加文档

$firestoreClient->addDocument($collection, [
    'booleanTrue' => true,
    'booleanFalse' => false,
    'null' => null,
    'string' => 'abc123',
    'integer' => 123456,
    'arrayRaw' => [
        'string' => 'abc123',
    ],
    'bytes' => new FirestoreBytes('bytesdata'),
    'array' => new FirestoreArray([
        'string' => 'abc123',
    ]),
    'reference' => new FirestoreReference('/users/23'),
    'object' => new FirestoreObject(['nested1' => new FirestoreObject(['nested2' => new FirestoreObject(['nested3' => 'test'])])]),
    'timestamp' => new FirestoreTimestamp,
    'geopoint' => new FirestoreGeoPoint(1,1),
]);

注意: 如果您想设置自定义的 文档 ID,则传递第三个参数,否则将自动生成 ID。

或者

$document = new FirestoreDocument;
$document->setObject('sdf', new FirestoreObject(['nested1' => new FirestoreObject(['nested2' => new FirestoreObject(['nested3' => 'test'])])]));
$document->setBoolean('booleanTrue', true);
$document->setBoolean('booleanFalse', false);
$document->setNull('null', null);
$document->setString('string', 'abc123');
$document->setInteger('integer', 123456);
$document->setArray('arrayRaw', ['string'=>'abc123']);
$document->setBytes('bytes', new FirestoreBytes('bytesdata'));
$document->setArray('arrayObject', new FirestoreArray(['string' => 'abc123']));
$document->setTimestamp('timestamp', new FirestoreTimestamp);
$document->setGeoPoint('geopoint', new FirestoreGeoPoint(1.11,1.11));

$firestoreClient->addDocument($collection, $document, 'customDocumentId');

等等

$document->fillValues([
    'string' => 'abc123',
    'boolean' => true,
]);

插入/更新文档

  • 更新(合并)或插入文档

以下将合并文档(如果存在),否则插入数据。

$firestoreClient->updateDocument($documentRoot, [
    'newFieldToAdd' => new FirestoreTimestamp(new DateTime('2018-04-20 15:00:00')),
    'existingFieldToRemove' => new FirestoreDeleteAttribute
]);

注意: 将第三个参数作为布尔值 true 传递将强制检查文档必须存在,反之亦然,以便执行更新操作。

例如:如果您只想在文档存在时更新,否则将抛出 MrShan0\PHPFirestore\Exceptions\Client\NotFound (异常)。

$firestoreClient->updateDocument($documentPath, [
    'newFieldToAdd' => new FirestoreTimestamp(new DateTime('2018-04-20 15:00:00')),
    'existingFieldToRemove' => new FirestoreDeleteAttribute
], true);
  • 覆盖或插入文档
$firestoreClient->setDocument($collection, $documentId, [
    'newFieldToAdd' => new FirestoreTimestamp(new DateTime('2018-04-20 15:00:00')),
    'existingFieldToRemove' => new FirestoreDeleteAttribute
], [
    'exists' => true, // Indicate document must exist
]);

删除文档

$collection = 'collection/document/innerCollection';
$firestoreClient->deleteDocument($collection, $documentId);

分页列表文档(或自定义参数)

$collections = $firestoreClient->listDocuments('users', [
    'pageSize' => 1,
    'pageToken' => 'nextpagetoken'
]);

注意: 您可以传递自定义参数,这些参数由 firestore 列表文档 支持。

从文档获取字段

$document->get('bytes')->parseValue(); // will return bytes decoded value.

// Catch field that doesn't exist in document
try {
    $document->get('allowed_notification');
} catch (\MrShan0\PHPFirestore\Exceptions\Client\FieldNotFound $e) {
    // Set default value
}

Firebase 身份验证

使用电子邮件和密码登录。

$firestoreClient
    ->authenticator()
    ->signInEmailPassword('testuser@example.com', 'abc123');

匿名登录。

$firestoreClient
    ->authenticator()
    ->signInAnonymously();

检索身份验证令牌

$authToken = $firestoreClient->authenticator()->getAuthToken();

待办事项

  • 添加删除属性支持。
  • 添加对对象、布尔值、null、字符串、整数、数组、时间戳、地理点和字节的支撑。
  • 添加异常处理。
  • 列出所有文档。
  • 列出所有集合。
  • 支持过滤和分页。
  • 支持结构化查询。
  • 支持事务。
  • 支持索引。
  • 支持整个集合删除。

测试

composer test

变更日志

请参阅 CHANGELOG 了解最近更改的详细信息。

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全

如果您发现任何与安全相关的问题,请通过电子邮件 ahsankhatri1992@gmail.com 联系,而不是使用问题跟踪器。

致谢

许可证

MIT 许可证 (MIT)。请参阅 许可证文件 了解更多信息。