ahsankhatri / firestore-php
此包已弃用且不再维护。未建议替代包。
Firestore PHP 客户端
v2.0.4
2020-04-04 20:10 UTC
Requires
- php: >=5.6.6
- ext-curl: *
- ext-json: *
- guzzlehttp/guzzle: ~6.0|~5.0|~4.0
Requires (Dev)
- phpunit/phpunit: 5.7
README
此包完全基于 Firestore REST API
身份验证 / 生成 API 密钥
- 访问 Google Cloud Firestore API
- 选择您想要的项目。
- 从左侧菜单选择
凭据
并从服务器密钥中选择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)。请参阅许可文件了解详细信息。