Acesso ao banco de dados Firebase Firestore com PHP Para iniciar é preciso configurar o ambiente, ver tutorial em anexo. Criamos uma classe pra fazer CRUD num banco de dados da Google, Firebase Firestore utilizando PHP. A seguir temos a classe para acesso ao Firestore: ...
RC
Acesso ao banco de dados Firebase Firestore com PHP  
Para iniciar é preciso configurar o ambiente, ver tutorial em anexo.

Criamos uma classe pra fazer CRUD num banco de dados da Google, Firebase Firestore utilizando PHP.

A seguir temos a classe para acesso ao Firestore:

 
  1. <?php
  2. require_once 'vendor/autoload.php';
  3. use Google\Cloud\Firestore\FirestoreClient;
  4. //Pegar um item passando seu id, já que a coleção é informada ao instânciar a classe.
  5. //print_r($fs->getDocument('2'));
  6. //Recuperar um item podendo passar filtros, já que a coleção é informada ao instânciar a classe.
  7. //print_r($fs->getByFilter('descricao', '=', 'Observação final'));
  8. //Listar todos os itens de uma classe, já que a coleção é informada ao instânciar a classe.
  9. //print_r($fs->getAll());
  10. //Salvar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
  11. //Forma de passar o array para storeDocument
  12. //$arr = [ 'descricao' => 'teste'];
  13. //$fs->storeDocument(6, $arr);
  14. //Atualisar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
  15. //Forma de passar o array para updateDocument
  16. //$arr = [ 'path' => 'descricao', 'value' => 'Teste 22' ];
  17. //$fs->updateDocument('6', $arr);
  18. //Deletar um documento passando seu id como parametro, já que a coleção é informada ao instânciar a classe.
  19. //$fs->deleteDocument(6);
  20. class Firestore
  21. {
  22. protected $db;
  23. protected $colecao;
  24. public function __construct(string $collection)
  25. {
  26. $this->db = new FirestoreClient([
  27. 'projectId' => 'nome-projeto-no-firebase'
  28. ]);
  29. $this->colecao = $collection;
  30. }
  31. public function storeDocument($id, array $arr)
  32. {
  33. $this->db->collection($this->colecao)->document($id)->set($arr);
  34. }
  35. public function updateDocument(string $id, array $arr)
  36. {
  37. $mudanca = $this->db->collection($this->colecao)->document($id);
  38. $mudanca->update([$arr]);
  39. }
  40. /**
  41. * Get document and all data with checking for exists
  42. * @param string $id
  43. * @return array|null|string
  44. */
  45. public function getDocument(string $id)
  46. {
  47. try {
  48. if (empty($id)) throw new Exception('Informe o nome da classe!');
  49. if ($this->db->collection($this->colecao)->document($id)->snapshot()->exists()) {
  50. return $this->db->collection($this->colecao)->document($id)->snapshot()->data();
  51. } else {
  52. throw new Exception('Document are not exists');
  53. }
  54. } catch (Exception $exception) {
  55. return $exception->getMessage();
  56. }
  57. }
  58. public function getAll()
  59. {
  60. try
  61. {
  62. $count = 0;
  63. if (empty($this->colecao)) throw new Exception('Informe uma classe!');
  64. $documents = $this->db->collection($this->colecao)->documents();
  65. foreach ($documents as $document)
  66. {
  67. $count++;
  68. if ($document->exists())
  69. {
  70. print_r($document->data());
  71. echo "<br>";
  72. }
  73. }
  74. if( $count == 0)
  75. {
  76. throw new Exception('Informe uma classe correta');
  77. }
  78. }
  79. catch (Exception $exception)
  80. {
  81. return $exception->getMessage();
  82. }
  83. }
  84. /**
  85. * Get document with where condition
  86. * @param string $field
  87. * @param string $operator
  88. * @param $value
  89. * @return array
  90. */
  91. public function getByFilter(string $field, string $operator, $value)
  92. {
  93. $arr = [];
  94. $query = $this->db->collection($this->colecao)->where($field, $operator, $value)->documents()->rows();
  95. if(!empty($query))
  96. {
  97. foreach ($query as $item) {
  98. $arr = $item->data();
  99. }
  100. }
  101. return $arr;
  102. }
  103. /**
  104. * Create new document with data
  105. * @param string $id
  106. * @param array $data
  107. * @return bool|string
  108. */
  109. public function newDocument(string $id, array $data = [])
  110. {
  111. try {
  112. $this->db->collection($this->colecao)->document($id)->create($data);
  113. return true;
  114. } catch (Exception $exception){
  115. return $exception->getMessage();
  116. }
  117. }
  118. /**
  119. * Create new collection
  120. * @param string $name
  121. * @param string $doc_name
  122. * @param array $data
  123. * @return bool|string
  124. */
  125. public function newCollection(string $name, string $doc_name, array $data = [])
  126. {
  127. try {
  128. $this->db->collection($name)->document($doc_name)->create($data);
  129. return true;
  130. } catch (Exception $exception) {
  131. return $exception->getMessage();
  132. }
  133. }
  134. /**
  135. * Drop exists document in collection
  136. * @param string $name
  137. * @return void
  138. */
  139. public function deleteDocument(string $id)
  140. {
  141. $this->db->collection($this->colecao)->document($id)->delete();
  142. }
  143. /**
  144. * Drop exists collection
  145. * @param string $name
  146. * @return void
  147. */
  148. public function deleteCollection(string $name)
  149. {
  150. $documents = $this->db->collection($name)->limit(1)->documents();
  151. while (!$documents->isEmpty()) {
  152. foreach ($documents as $item) {
  153. $item->reference()->delete();
  154. }
  155. }
  156. }
  157. }
  158. </code>



Segue exemplo de utilização:

 
  1. <?php
  2. require_once 'Firestore.php';
  3. $fs = new Firestore('nome-da-colecao');
  4. //Pegar um item passando seu id, já que a coleção é informada ao instânciar a classe.
  5. //print_r($fs->getDocument('2'));
  6. //Recuperar um item podendo passar filtros, já que a coleção é informada ao instânciar a classe.
  7. //print_r($fs->getByFilter('descricao', '=', 'Observação final'));
  8. //Listar todos os itens de uma classe, já que a coleção é informada ao instânciar a classe.
  9. print_r($fs->getAll());
  10. //Salvar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
  11. //Forma de passar o array para storeDocument
  12. //$arr = [ 'descricao' => 'teste'];
  13. //$fs->storeDocument(6, $arr);
  14. //Atualisar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
  15. //Forma de passar o array para updateDocument
  16. //$arr = [ 'path' => 'descricao', 'value' => 'teste 22' ];
  17. //$fs->updateDocument('6', $arr);
  18. //Deletar um documento passando seu id como parametro, já que a coleção é informada ao instânciar a classe.
  19. //$fs->deleteDocument(6);
  20. </code>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (3)


RC

JR

É obrigatória a instalação da extensão gRPC ?
RM

Isso mesmo João, é necessário o gRPC.
Se quiser manda teu email que vou passar o manual de como instalei.