Jhonatan
Jhonatan
Jun 25 · 3 min read

Utilizando Laravel e OCI8 em 4+1 passos

Ao fim deste artigo você terá conquistado os seguinte itens:

  • A instalação da dependência yajra/laravel-oci8, que habilita o uso de bases Oracle.
  • Poderá utilizar uma Docker image de centOS7 + OCI pronta para uso.
  • Terá realizada a conexão via oracle por três maneiras distintas

Passo 1: Instalação do yajra/laravel-oci8

Dentro de sua pasta raiz do laravel execute este comando: composer require yajra/laravel-oci8:"5.8.*"` após isso basta aguardar que o composer vai fazer o resto por você.

Importante: Observer que passei o valor 5.8.* ao final do comando pois esta é a versão do laravel que estou utilizando.

Passo 2: Registro de um novo provedor

Agora que a lib já foi instalada vá ao arquivo config/app.php e dentro da seção providers adicione o valor Yajra\Oci8\Oci8ServiceProvider::class

Segundo o guia este é um passo opcional para o Laravel 5.5+ mas eu uso mesmo assim.

Passo 3: Arquivo individual de configuração

Apesar de o guia informar que este é um passo opcional eu recomendo que seja feito pois existem múltiplos tipos de conexão nos bancos Oracle, um via TNS e outro via service name e com um arquivo de config separado podemos manipular isso com maior facilidade.

Para criar o arquivo config/oracle.php execute o comando: php artisan vendor:publish — tag=oracle

Agora dentro do config/oracle.php vocçe pode utilizar dois tipos de configuração:

Via TNS
Via Service Name

Os códigos estão disponíveis para cópia no guia oficial.

Passo 4: Testes manuais

Agora basta informar os valores de conexão. No meu caso eu utilizo via Service Name então estas são minhas variáveis de ambiente:

Uma vez informados seus dados de conexão agora basta utilizar como fazemos com qualquer outro banco. São suas opções para teste:

Via artisan Tinker
Criar um model de uma tabela conhecida e dentro do artisa tinker executar o método first():

Resultado do teste via terminal Tinker

Via chamada direta do facede DB
Dentro de um action do controler execute: dd(DB::table('my_table_name')->get());` ele deve imprimir o resultado na tela

Teste Manual
Pode ser que por algum motivo você precise de um teste manual do oracle pode utilizar esse arquivo de exemplo, basta informar seus dados de acesso.

Passo Bônus: Erros conhecidos

Configurações do oracle não foram lidas das variáveis de ambiente
Pode acontecer de você receber um erro: SQL[2002] Conection Refused bla bla bla..., É claro que isso é um erro de conexão com a base, mas como o erro diz [SQL ...] e não [ORA XXXXX] isso é um indicativo de que o laravel não esta usando suas configurações. Para solucionar execute os seguintes passos:

  • Verifique se você realmente informou valores para as variáveis do passo 4.
  • Na raiz do laravel execute os comandos (terminal): php artisan config:cache` e php artisan config:clear` isso vai limpar a cache do laravel.
  • No arquivo: config/database.php` force o valor default de DB_CONECTION para oracle
  • Após isso reinicie o servidor e tente novamente, boa sorte.

Não retorna valores via Eloquent mode.
Caso a chamada direta do seu Model não retorne dados pode ser que: Ou você não informou do Schema/nome da base. você pode corrigir isso usando o $schema ou apenas alterando o nome da $table:

Concatenando o nome da tabela.

Bom pessoal, espero que isso ajude vocês diminuir a curva de aprendizado e uso do Oracle com laravel, pois isso ainda é complicadinho. Tomara que melhore isso nas próximas versões. Um abraço!

Bônus — Ambiente de trabalho: Caso você não tenha seu ambiente php e OCI8 prontos e saiba como usar uma imagem docker aqui esta um docker-compose para levantar seu ambiente de teste. Se quiser saber como a imagem foi construída aqui esta seu docker file.