Usando Illuminate Database com Eloquent em seu aplicativo PHP sem Laravel

Illuminate é o mecanismo de banco de dados do Laravel menos o Laravel. Ele vem junto com o Eloquent ORM em Laravel. Se você gostaria de construir seus aplicativos PHP com ORMs e prefere não usar o Laravel, este tutorial é para você.

Neste tutorial, vamos construir o back-end para um Q&A App com PHP, Illuminate Database e o Eloquent ORM.

Dependências do Projeto

Recursos do aplicativo

Nosso aplicativo executará as seguintes tarefas:

  • adicionar um usuário
  • adicione uma pergunta
  • adicionar uma resposta a uma pergunta
  • voto positivo em uma resposta
  • obter uma pergunta com respostas
  • obter todas as perguntas e usuários que as fizeram
  • obter perguntas, respostas e votos positivos específicos
  • contar perguntas de um determinado usuário
  • atualizar resposta do usuário
  • excluir uma pergunta

Primeiramente, vamos criar nosso diretório e estrutura do projeto. No restante do tutorial, presumo que eloquente é o nome do diretório raiz do nosso projeto.

No diretório principal do projeto, criaremos um aplicativo pasta e, em seguida, nesta aplicativo pasta, criaremos duas pastas: modelos e controladores. Nesta foto, nossa pasta principal do projeto é nomeada eloquente. Você deve substituí-lo por qualquer nome que preferir.

Organização do projetoOrganização do projetoOrganização do projeto

Instale a Biblioteca Eloquent

Em seguida, vamos instalar as dependências do nosso projeto. Na pasta principal do projeto, vamos criar o eloquente/composer.json Arquivo. Depois de criá-lo, cole o seguinte código em nosso eloquente/composer.json Arquivo.

Para instalar a biblioteca de banco de dados Illuminate, vamos adicionar “illuminate/database”: “^7.30”, para nosso eloquente/composer.json Arquivo.

Em seguida, vamos adicionar o carregamento automático PSR-4 para nossos modelos e controladores:

Agora, nosso eloquente/composer.json arquivo deve ficar assim:

Por fim, vamos executar os dois comandos a seguir na raiz do diretório do nosso projeto.

Configurar tabelas de banco de dados e arquivo de configuração

Vamos adicionar um arquivo de configuração para nossas credenciais de banco de dados. No diretório principal do projeto, vamos criar um arquivo chamado eloquente/config.php e defina os detalhes do banco de dados no eloquente/config.php arquivo conforme mostrado no trecho a seguir. Observe que os valores devem ser substituídos pelos seus próprios detalhes de conexão.

Em seguida, vamos criar um esquema para nosso aplicativo.

Uma coisa a observar antes de criarmos o esquema para as tabelas em nosso banco de dados é que podemos adicionar timestamps ao nosso esquema.

O Eloquent ORM espera duas colunas de carimbo de data/hora se quisermos habilitar a operação de carimbo de data/hora em uma tabela ou modelo específico. Eles são o created_at e updated_at colunas. Se habilitarmos carimbos de data/hora para um modelo, o Eloquent atualizará automaticamente esses campos com a hora em que criamos ou atualizamos um registro.

Há uma terceira coluna chamada deleted_at. o deleted_at timestamp funciona de forma diferente, no entanto. Eloquent tem um recurso de exclusão suave que usa o deleted_at coluna para determinar se um registro foi excluído. Se você excluir um registro com o eloquente delete função e você ativar exclusão reversível, a coluna é atualizada com a hora da exclusão. Esses itens excluídos podem ser recuperados a qualquer momento.

Neste aplicativo, aproveitaremos os timestamps, então usaremos todos os três em nossa criação de esquema.

Vamos criar tabelas com os seguintes comandos no MySQL.

Perguntas

Vamos usar a seguinte instrução SQL para criar o questions tabela em nosso banco de dados.

Respostas

Vamos usar a seguinte instrução SQL para criar o answers tabela em nosso banco de dados.

votos positivos

Vamos usar a seguinte instrução SQL para criar o upvotes tabela em nosso banco de dados.

Usuários

Vamos usar a seguinte instrução SQL para criar o users tabela em nosso banco de dados.

Então, concluímos a configuração do banco de dados agora. Em seguida, criaremos arquivos de modelo necessários em nosso aplicativo.

Configurando modelos Eloquent

Em primeiro lugar, precisamos criar um Database classe para configurar a conexão com o banco de dados.

o Database Classe

Crie o eloquente/app/modelos/banco de dados.php arquivo com seu editor de texto favorito e adicione o seguinte conteúdo.

No arquivo acima, inicializamos o Capsule classe. Em seguida, usamos o addConnection método para criar uma nova conexão MySQL. Finalmente, usamos o bootEloquent método para inicializar o modelo Eloquent.

o User Modelo

Vamos criar o eloquent/app/models/User.php arquivo com o seguinte conteúdo.

o Question Modelo

Vamos criar o eloquent/app/models/Question.php arquivo com o seguinte conteúdo.

o Answer Modelo

Vamos criar o eloquent/app/models/Answer.php arquivo com o seguinte conteúdo.

o Upvote Modelo

Vamos criar o eloquent/app/models/Upvote.php arquivo com o seguinte conteúdo.

E é isso para configurar classes de modelo.

Criar Arquivos do Controlador Frontal

Nesta seção, criaremos arquivos principais de bootstrap e front controller.

o bootstrap.php Arquivo

É um arquivo comum que é usado para inicializar nosso aplicativo. Vamos criar o bootstrap.php arquivo no diretório raiz do nosso aplicativo.

Também configuramos uma conexão de banco de dados instanciando o Database classe.

o index.php Arquivo

É um front controller do nosso aplicativo, então basicamente é um ponto de entrada do nosso aplicativo.

Vamos criar o index.php arquivo na raiz do nosso aplicativo.

Na verdade, usaremos o index.php arquivo para testar todos os nossos casos de uso no restante deste artigo.

Agora, também configuramos modelos. Na próxima seção sobre wards, começaremos a testar nossos casos de uso.

Tarefa 1: Adicionar um usuário

Primeiramente, vamos criar o eloquent/app/controllers/Users.php controller com o seguinte conteúdo.

Na nossa Users classe controlador, criamos o create_user método que é usado para criar um novo usuário. Nós usamos o create método do Eloquent model para criar um novo usuário.

Vamos chamá-lo de nosso index.php arquivo para testá-lo, conforme mostrado no trecho a seguir. Certifique-se de criptografar a senha com segurança antes de armazená-la. Nunca é recomendado armazenar senhas de texto simples em db.

Depois de executar o index.php arquivo, ele deve criar um novo usuário no users tabela.

Tarefa 2: adicione uma pergunta

Primeiramente, vamos criar o eloquent/app/controllers/Questions.php controller com o seguinte conteúdo.

Na nossa Questions classe controlador, criamos o create_question método que é usado para criar uma nova pergunta. Nós usamos o create método do Eloquent modelo para criar uma nova pergunta.

Vamos chamá-lo de nosso index.php arquivo para testá-lo, conforme mostrado no trecho a seguir.

Depois de executar o index.php arquivo, ele deve criar uma nova pergunta no questions tabela.

Tarefa 3: adicione uma resposta a uma pergunta

Nesta seção, veremos como adicionar respostas às nossas perguntas.

Primeiramente, vamos criar o eloquent/app/controllers/Answers.php controller com o seguinte conteúdo.

Na nossa Answers classe controlador, criamos o add_answer método que é usado para criar uma nova resposta.

Vamos chamá-lo de nosso index.php arquivo para testá-lo, conforme mostrado no trecho a seguir.

Depois de executar o index.php arquivo, ele deve criar uma nova resposta no answers tabela.

Tarefa 4: vote a favor de uma resposta

Isso é praticamente os mesmos passos que fizemos anteriormente.

Vamos adicionar o seguinte método no eloquent/app/controllers/Answers.php controlador.

Você também precisa importar o Upvote modelo no eloquent/app/controllers/Answers.php controller arquivo adicionando o seguinte código.

Finalmente, nós o chamamos de nosso index.php arquivo para testá-lo, conforme mostrado no trecho a seguir.

Tarefa 5: obtenha uma pergunta com respostas

Para tarefas como essa, podemos usar relacionamentos Eloquent.

Tipos de relacionamentos incluem um para um, um para muitos, muitos para muitos, etc.

Ao usar essas relações, o Eloquent assume uma chave estrangeira na forma nome do modelo_id existe nos modelos. Para esta tarefa, o relacionamento é um para muitos porque uma única pergunta pode possuir qualquer quantidade de respostas.

Em primeiro lugar, vamos definir esse relacionamento adicionando a seguinte função ao nosso Question modelo.

Depois disso, no eloquent/app/controllers/Questions.php controller, vamos adicionar a seguinte função para obter perguntas com respostas.

Ele recupera as perguntas com suas respostas correspondentes.

Vamos testar com o index.php arquivo conforme mostrado no trecho a seguir.

Você pode usar o var_dump ou print_r função para imprimir o $all variável para ver os resultados.

Tarefa 6: obter todas as perguntas e usuários que as fizeram

Será um relacionamento um para um porque uma pergunta tem um usuário, então vamos adicionar o seguinte método ao Question modelo.

Depois disso, no eloquent/app/controllers/Questions.php controller, vamos adicionar a seguinte função.

Vamos testar com o index.php arquivo conforme mostrado no trecho a seguir.

Tarefa 7: obtenha uma pergunta com respostas e votos positivos

Primeiro, definimos uma relação entre respostas e votos positivos. Uma resposta tem muitos votos positivos, então a relação é de um para muitos.

Vamos adicionar a seguinte função ao nosso Answer modelo:

No eloquent/app/controllers/Questions.php controller, vamos criar a seguinte função.

Vamos testar com o index.php arquivo conforme mostrado no trecho a seguir.

Podemos imprimir o $one_question variável para ver os resultados.

Tarefa 8: conte todas as perguntas de um determinado usuário

Primeiramente, vamos importar o Question modelo no eloquent/app/controllers/Users.php controlador:

Depois de importá-lo, vamos adicionar a seguinte função no mesmo arquivo.

Finalmente, vamos testá-lo com o index.php arquivo conforme mostrado no trecho a seguir.

Retorna a contagem do número de perguntas que foram adicionadas por um usuário com id 1.

Tarefa 9: atualizar a resposta de um usuário

O conceito de atualização com o Eloquent ORM é bastante simples. Primeiro encontramos um registro e depois modificamos e salvamos.

No eloquent/app/controllers/Answers.php controller, vamos adicionar esta função:

Finalmente, vamos testá-lo com o index.php arquivo conforme mostrado no trecho a seguir.

Isso retorna um valor booleano — true — se a atualização for bem-sucedida.

Tarefa 10: excluir uma pergunta (exclusão reversível)

Por fim, implementaremos o recurso Eloquent SoftDelete.

Primeiramente, vamos importar o IlluminateDatabaseEloquentSoftDeletes traço no Question modelo com a seguinte declaração.

Depois de importado, podemos usá-lo assim.

Finalmente, vamos adicionar deleted_at para o protected $dates propriedade do modelo. Estas são as etapas necessárias.

Nosso Question modelo agora se parece com isso:

Em seguida, vá em frente e crie o delete_question método no eloquent/app/controllers/Questions.php controlador.

Finalmente, vamos testá-lo com o index.php arquivo conforme mostrado no trecho a seguir.

Parabéns! Você acabou de construir um back-end totalmente funcional com Illuminate e Eloquent. E não precisamos escrever tanto código para conseguir tudo isso.

Conclusão

O Illuminate também vem com o Query Builder, que você pode usar para consultas de banco de dados ainda mais complexas e é definitivamente algo que você deseja experimentar e usar em seu aplicativo.

A única coisa que falta no Illuminate Database autônomo são as migrações de banco de dados, que são um recurso adorável do Laravel, e o Lumen, o microframework do Laravel. Você deve considerar o uso de ambos em seus aplicativos para aproveitar os recursos úteis que vêm com eles.

Você pode descobrir mais sobre o Eloquent na página de documentação oficial do Eloquent.

Referências

Este post foi atualizado com contribuições de Sajal Soni. Sajal pertence à Índia e adora passar o tempo criando sites baseados em estruturas de código aberto.

Deixe uma resposta