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:
Segue exemplo de utilização:
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:
- <?php
- require_once 'vendor/autoload.php';
- use Google\Cloud\Firestore\FirestoreClient;
- //Pegar um item passando seu id, já que a coleção é informada ao instânciar a classe.
- //print_r($fs->getDocument('2'));
- //Recuperar um item podendo passar filtros, já que a coleção é informada ao instânciar a classe.
- //print_r($fs->getByFilter('descricao', '=', 'Observação final'));
- //Listar todos os itens de uma classe, já que a coleção é informada ao instânciar a classe.
- //print_r($fs->getAll());
- //Salvar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
- //Forma de passar o array para storeDocument
- //$arr = [ 'descricao' => 'teste'];
- //$fs->storeDocument(6, $arr);
- //Atualisar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
- //Forma de passar o array para updateDocument
- //$arr = [ 'path' => 'descricao', 'value' => 'Teste 22' ];
- //$fs->updateDocument('6', $arr);
- //Deletar um documento passando seu id como parametro, já que a coleção é informada ao instânciar a classe.
- //$fs->deleteDocument(6);
- class Firestore
- {
- protected $db;
- protected $colecao;
- public function __construct(string $collection)
- {
- $this->db = new FirestoreClient([
- 'projectId' => 'nome-projeto-no-firebase'
- ]);
- $this->colecao = $collection;
- }
- public function storeDocument($id, array $arr)
- {
- $this->db->collection($this->colecao)->document($id)->set($arr);
- }
- public function updateDocument(string $id, array $arr)
- {
- $mudanca = $this->db->collection($this->colecao)->document($id);
- $mudanca->update([$arr]);
- }
- /**
- * Get document and all data with checking for exists
- * @param string $id
- * @return array|null|string
- */
- public function getDocument(string $id)
- {
- try {
- if (empty($id)) throw new Exception('Informe o nome da classe!');
- if ($this->db->collection($this->colecao)->document($id)->snapshot()->exists()) {
- return $this->db->collection($this->colecao)->document($id)->snapshot()->data();
- } else {
- throw new Exception('Document are not exists');
- }
- } catch (Exception $exception) {
- return $exception->getMessage();
- }
- }
- public function getAll()
- {
- try
- {
- $count = 0;
- if (empty($this->colecao)) throw new Exception('Informe uma classe!');
- $documents = $this->db->collection($this->colecao)->documents();
- foreach ($documents as $document)
- {
- $count++;
- if ($document->exists())
- {
- print_r($document->data());
- echo "<br>";
- }
- }
- if( $count == 0)
- {
- throw new Exception('Informe uma classe correta');
- }
- }
- catch (Exception $exception)
- {
- return $exception->getMessage();
- }
- }
- /**
- * Get document with where condition
- * @param string $field
- * @param string $operator
- * @param $value
- * @return array
- */
- public function getByFilter(string $field, string $operator, $value)
- {
- $arr = [];
- $query = $this->db->collection($this->colecao)->where($field, $operator, $value)->documents()->rows();
- if(!empty($query))
- {
- foreach ($query as $item) {
- $arr = $item->data();
- }
- }
- return $arr;
- }
- /**
- * Create new document with data
- * @param string $id
- * @param array $data
- * @return bool|string
- */
- public function newDocument(string $id, array $data = [])
- {
- try {
- $this->db->collection($this->colecao)->document($id)->create($data);
- return true;
- } catch (Exception $exception){
- return $exception->getMessage();
- }
- }
- /**
- * Create new collection
- * @param string $name
- * @param string $doc_name
- * @param array $data
- * @return bool|string
- */
- public function newCollection(string $name, string $doc_name, array $data = [])
- {
- try {
- $this->db->collection($name)->document($doc_name)->create($data);
- return true;
- } catch (Exception $exception) {
- return $exception->getMessage();
- }
- }
- /**
- * Drop exists document in collection
- * @param string $name
- * @return void
- */
- public function deleteDocument(string $id)
- {
- $this->db->collection($this->colecao)->document($id)->delete();
- }
- /**
- * Drop exists collection
- * @param string $name
- * @return void
- */
- public function deleteCollection(string $name)
- {
- $documents = $this->db->collection($name)->limit(1)->documents();
- while (!$documents->isEmpty()) {
- foreach ($documents as $item) {
- $item->reference()->delete();
- }
- }
- }
- }
- </code>
Segue exemplo de utilização:
- <?php
- require_once 'Firestore.php';
- $fs = new Firestore('nome-da-colecao');
- //Pegar um item passando seu id, já que a coleção é informada ao instânciar a classe.
- //print_r($fs->getDocument('2'));
- //Recuperar um item podendo passar filtros, já que a coleção é informada ao instânciar a classe.
- //print_r($fs->getByFilter('descricao', '=', 'Observação final'));
- //Listar todos os itens de uma classe, já que a coleção é informada ao instânciar a classe.
- print_r($fs->getAll());
- //Salvar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
- //Forma de passar o array para storeDocument
- //$arr = [ 'descricao' => 'teste'];
- //$fs->storeDocument(6, $arr);
- //Atualisar um documento informando seu id, e informando o array com os dados, já que a coleção é informada ao instânciar a classe.
- //Forma de passar o array para updateDocument
- //$arr = [ 'path' => 'descricao', 'value' => 'teste 22' ];
- //$fs->updateDocument('6', $arr);
- //Deletar um documento passando seu id como parametro, já que a coleção é informada ao instânciar a classe.
- //$fs->deleteDocument(6);
- </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
Gestor de conteúdo (SITE) + Loja Virtual (E-Commerce) + Emissor de Notas para infoprodutos
Quero me inscrever agora!
É obrigatória a instalação da extensão gRPC ?
Isso mesmo João, é necessário o gRPC.
Se quiser manda teu email que vou passar o manual de como instalei.