Laravel e banco de dados SQLite

Neste post vou mostrar como configurar o Laravel para acessar um banco de dados SQLite, e no processo descrever alguns dos recursos que este framework fornece para manipulação de banco de dados.

O Laravel simplifica muito a tarefa de trabalhar com banco de dados, pois além de possibilitar a execução das consultas SQL diretamente em modo raw,  fornece um construtor de querys com interface fluente e que permite a execução das operações mais usados em um B.D. sem a necessidade de escrever comandos SQL.

Usando este construtor, o Laravel Query Builder, sua aplicação poderá ser portada de forma rápida, com alterações mínimas, para qualquer dos bancos de dados suportados pelo framework.

De acordo com a documentação (versão atual 7.x) o framework fornece suporte para os seguintes SGBD:

  • MySQL 5.6+
  • PostgreSQL 9.4+
  • SQLite 3.8.8+
  • SQL Server 2017+




Eloquent ORM

No que diz respeito a manipulação de bancos de dados o recurso mais poderoso oferecido pelo Laravel é o Eloquent ORM.

Este consiste em uma implementação do padrão de projeto ActiveRecord, o qual, em linhas gerais, preconiza que cada objeto representa uma linha de uma tabela de seu banco de dados, ou seja, cada registro  deverá corresponder a um objeto, instância de uma classe, que, por sua vez, deverá possuir um método para cada atributo na tabela correspondente.

Nesta implementação cada tabela do banco de dados corresponderá a um Model e, através dele, serão feitas as consultas, inserções e remoções nas respectivas tabelas.

O Eloquent cuida de todas as operações relacionados com criação das tabelas, definição de chaves, relacionamentos, inserção e remoção de registros e outras mais, de forma que você não precisará escrever nenhuma query SQL.

Arquivos de Configuração

No Laravel as configurações de bancos de dados são feitas em dois arquivos:

  • config/database.php : é onde estão definidas todas as conexões aos bancos de dados suportados pelo framework. Aqui também é onde fica definida qual será a conexão de bancos de dados padrão a ser utilizada pelo Laravel;
  • .env  : arquivo de configuração contendo os parâmetros que definem os valores usados pelo Laravel na conexão com os banco de dados, ente eles: tipo de conexão, nome do banco de dados, usuário e senha a serem usados.

Na prática o que acontece é que o arquivo database.php contém código que busca os valores definidos no arquivo .env e os utiliza como parâmetros da conexão ao banco de dados. Caso não encontre valores definidos no .env, utilizará os valores padrão que já se encontram no próprio database.php.

SQLite

Consiste em um sistema gerenciador de banco de dados (SGBD) implementado em uma única biblioteca escrita na linguagem C, ou seja, não se trata de uma biblioteca para acessar um sistema e sim o próprio SGBD na forma de uma biblioteca.

Trata-se do sistema de banco de dados mais utilizado mundialmente e já vem embutido em vários sistemas operacionais e dispositivos, entre eles alguns smartphones, sendo, por exemplo, o banco de dados padrão no sistema Android.

Caso tenha optado em usar a máquina Homestead (conforme descrito neste post) como seu ambiente de desenvolvimento, o SQLite já estará disponível para uso, do contrário será necessário fazer a instalação.

Para verificar se o SQLite já está instalado em seu sistema e qual a respectiva versão digite no terminal ou prompt de comando a linha abaixo:

sqlite3 –version

No site oficial, cujo link forneço abaixo, você encontra a versão mais atualizada do SQLite para vários sistemas operacionais e, caso necessário, pode fazer o download da instalação para seu ambiente de desenvolvimento.

https://www.sqlite.org/download.html




Configuração SQLite

Utilizaremos como exemplo a configuração de um banco de dados SQLite devido a rapidez e simplicidade com que isto pode ser feito no Laravel.

Além disso, todos os dados do banco estarão no arquivo database.sqlite, o que facilitará as cópias de segurança.

O primeiro passo é criar o arquivo database.sqlite, para isto siga os passos abaixo.

Se estiver usando um terminal no Linux, ou o GitBash no Windows, na pasta do projeto execute o comando:

touch ./database/database.sqlite

Se estiver usando o prompt de comando Windows execute os comandos:

copy con .\database\database.sqlite
aperte a tecla F6

Atenção: se você utiliza o git observe que o arquivo .gitignore da pasta database contém uma linha *.sqlite que faz com que  este arquivo de banco de dados seja ignorado pelo controle de versões e, por isso, não seja copiado para o repositório remoto.

Em seguida edite o arquivo .env para que fique da seguinte forma:

DB_CONNECTION=sqlite
//DB_HOST=127.0.0.1
//DB_PORT=3306
//DB_DATABASE=homestead
//DB_USERNAME=homestead
//DB_PASSWORD=secret

A primeira linha define o tipo da conexão como sqlite e as demais são apenas comentários (note as barras duplas // na frente de cada uma delas) e serão ignoradas.

Na verdade, estas linhas poderiam ter sido excluídas, as mantive apenas para facilitar no caso de uma futura mudança no tipo de conexão ao banco de dados.

Assim concluímos a configuração do Laravel para uso do banco de dados SQLite e no próximo tópico aprenderemos um pouco a respeito das migrations.

Migrations

O mecanismo das Migration foi criado para servir como uma espécie de controle de versão das tabelas de um banco de dados no Laravel.

Cada arquivo de migration é referente a uma determinada tabela e contém o seu esquema, definição de campos, chaves e relacionamentos, bem como o código necessário para criação e eliminação da tabela a que se referem.

Além disso, em seu título é colocado um carimbo de tempo que serve para que o Laravel possa determinar a ordem em que foram criadas e obedecer a esta ordem durante a execução.

Desta forma, caso duas migrations se refiram à mesma tabela, por exemplo uma criando e outra alterando sua estrutura, o Laravel poderá, baseado no carimbo de tempo, determinar qual delas será executada primeiro.

Migrations padrão

Em uma instalação padrão do Laravel já existem duas migrations responsáveis pela criação das tabelas: users e password_resets. Estas são usadas para implementar a autenticação no framework, assunto que vou abordar um outro post.

As migrations, por padrão, ficam armazenadas na pasta database\migrations da estrutura dos projetos em Laravel.

Executando as migrations

Para executar as migrations e, assim, criar as tabelas em nosso banco de dados basta, na pasta do projeto atual, em um terminal ou prompt de comando, executar o seguinte:

php artisan migrate

Este comando deverá produzir uma saída semelhante a ilustrada na figura abaixo:

Examinado o banco de dados

Para acessar o banco de dados e verificar se as tabelas foram devidamente criadas, execute os seguinte comandos:

sqlite3 ./database/database.sqlite
.tables
.quit

A saída do comando deverá ser semelhante à da figura abaixo:

sqlite3-tables

Examinado a figura vemos que a execução das migrations produziu a criação de três tabelas, em vez de duas, como mencionado anteriormente.

As tabelas user e password_resets já haviam sido citadas e são usadas na autenticação. Quanto a terceira tabela, de nome migrations, ela é usada internamente pelo Laravel para manter o estado das migrations e não deve ser alterada por nós usuários do framework.




DB Browser for SQLite

Como você deve ter percebido os comandos do SQLite não são muito convencionais, por exemplo .table para listar as tabelas de um banco de dados não é muito usual.

Assim, para facilitar sua navegação no banco de dados do aplicativo exemplo que estamos desenvolvendo, forneço abaixo o link de uma interface gráfica para o SQLite.

https://sqlitebrowser.org/

Trata-se do DB Browser for SQLite e abaixo vemos a tela representando o banco de dados que acabamos de criar quando aberto neste aplicativo.


Compare as estrutura das tabelas password_reset e users fonecidas acima com as migrations correspondentes e veja como o Laravel utiliza um elemento chamado de facade Schema para implementar a criação e manipulação das tabelas.

Utilizando este mecanismo as tabelas podem ser criadas, modificadas e destruídas de uma forma que independe do banco de dados e que funcionará para qualquer SGBD suportado pelo Laravel.

O próximo passo no aprendizado seria a criação de um CRUD (cadastro) simples. Assim, se tiver interesse pode ler o post :
Como criar um CRUD usando Laravel


Conheça outros posts que escrevi sobre o Laravel:
Vue.js no Laravel
Como instalar a máquina virtual Laravel Homestead
eBook chatbot usando Laravel Botman e Dialogflow