ahsankhatri/firestore-php

此包已弃用且不再维护。未建议替代包。

Firestore PHP 客户端

v2.0.4 2020-04-04 20:10 UTC

This package is auto-updated.

Last update: 2023-01-05 05:06:26 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();

待办事项

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

测试

composer test

更新日志

请参阅更新日志了解最近的变化。

贡献

请参阅贡献指南了解详情。

安全

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

致谢

许可

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