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

Curso completo Meu Negócio Pronto
Use para si, ou transforme em um negócio: Inclui aulas e códigos-fontes
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos


Meu negócio pronto 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.