Blog Bugginho Academy

Simplificando a sua vida com o Eloquent ORM

O Laravel é o mais popular Framework PHP da atualidade, e isso se dá pelo fato dele ser muito fácil de instalar, configurar e utilizar, além é claro de trazer por padrão uma série de ferramentas que facilitam e muito a vida do desenvolvedor. Uma dessas ferramentas é o Eloquent ORM. O Eloquent é uma implementação de Active Records muito simples e que deixa o seu código muito mais bonito e gostoso de trabalhar. Infelizmente nem todo desenvolvedor tem familiaridade com esse conceito e acaba escrevendo muitas queries de SQL na mão.

O objetivo desse texto é mostrar como é Eloquent (juntamente com o Query Builder) pode salvar sua vida, de uma maneira bem mais simples do que você imagina.

Um exemplo básico…

Como mostrado no post Migrando do Codeigniter para o Laravel 5.3 (Parte 4), criar e utilizar um Model no Laravel é muito simples. Por padrão todo Model estende de Eloquent, assim sendo você já tem acesso aos atributos e métodos do Eloquent em qualquer um dos seus Models 🙂

Indo pelo pressuposto que você leu o artigo acima e que você tem em sua base de dados uma tabela chamada “students”, vamos listar todos os alunos cadastrados nessa tabela

Esse simples código entregará à variável $students todos os estudantes constantes na tabela.

Esse exemplo foi extremamente simples, vamos agora ver alguns exemplos um pouco mais complexos

Exemplo 1: Obtendo o último registro de uma tabela

Uma situação muito comum que você vai encontrar em sua vida como desenvolvedor, é obter o último registro de uma tabela. Fazer isso no SQL é super simples e com o Eloquent é ainda mais simples.

O método orderBy() recebe 2 parâmetros. O primeiro é o nome da coluna a partir da qual você quer ordernar e o segundo é a forma que você quer ordenar, nesse caso, de forma descendente.

O método first() avisa ao Eloquent que queremos que ele retorne apenas o primeiro registro.

Nota: Como a ordenação está de forma descendente, o registro retornado será o último 😉

Exemplo 2: Consulta com Where aninhado

Uma recurso muito simples que o Eloquent provê, mas que muitos programadores iniciantes acabam tendo uma certa dificuldade é o Where aninhado.

Imagine a seguinte consulta: Obtenha todos os estudantes do sexo feminino que morem na Bahia e sejam casadas ou que morem em SP e sejam solteiras.

Bem, na mão grande o SQL ficaria assim

Mas o intuito desse texto é mostrar como utilizar o Eloquent para facilitar a nossa vida, então esse mesmo código poderia ser escrito da seguinte forma

Ué, não era para simplificar? O código ficou muito maior…

Sim, a princípio pode parecer que o código ficou mais complicado, mas pense no seguinte.

  1. Você está trabalhando de forma OO, o que facilita muito a manutenção
  2. Imagine como isso pode facilitar sua vida em queries mais complexas!

Nota: Quando você passa uma função anonima como parâmetro do método where(), o Eloquent identifica que você terá um grupo de where dentro de outro where

Exemplo 3: WhereNull / WhereNotNull

Muitas vezes você se deparará com a situação de ter que listar alguns registros quanto determinada coluna for nula ou quando não for nula. Resolver situações assim é muito simple.

Exemplo 4: Obter registros onde determinado valor for maior que outro

Esse é outro exemplo muito recorrente, e também muito simples de ser resolvido

Nota: O segundo parâmetro do método where é dinâmico. Se existirem apenas 2 parâmetros, ele entenderá que você está querendo utilizar o operador de igualdade, mas você pode informar um outro operador como no exemplo acima.

Exemplo 5: Between

Como você faria para obter todos os estudantes que tenham uma renda familiar entre R$ 2.000 e R$ 25.000?

Exemplo 6: Trabalhando com Datas

Trabalhar com datas para muitos é um saco, por sorte o Laravel traz algumas ferramentas muito bacanas que vão lhe ajudar muito, uma delas é o Carbon, mas não falaremos dele agora, por hora apenas veremos como trabalhar com datas com o Eloquent.

Imagine que você precisa obter todos os estudantes que tenham nascido em um determinado ano ou mês

Exemplo 7: Trabalhando com LIMIT e OFFSET

O Eloquent já traz um recurso muito simples para paginação, então, isso por si só já lhe poupará muito a utilização de Limit e Offset, mas paginação não é o único caso de uso para esses recursos

Imagine que você realiza uma consulta qualquer e quer obter do 6º ao 9º estudante retornado por essa consulta

Exemplo 8: Join

O Eloquent tem alguns métodos que facilitam muito a manipulação do relacionamento entre tabelas, mas as provavelmente em algum momento você precisará fazer um join a vulso.

Imagine que você queira saber qual a maior nota de um determinado estudante

O Eloquent já provê métodos para Inner join, left join e Right join

Exemplo 9: DB::raw

É muito comum que durante o desenvolvimento de um software, você precise utilizar funções nativas do SQL. Muitos iniciantes acham que não é possível utiliza-las com o Eloquent, mas isso não é verdade.

Vamos imaginar que você precise obter do banco de dados, o total de estudantes do sexo feminimo que tenham uma renda familiar acima de 2000, bem como a soma dessas rendas familiares

Com SQL você faria:

No Eloquent você pode fazer assim

Exemplo 10: Agrupamentos

Como exemplo final, eu vou criar a seguinte situação. Como faríamos para obter a soma total das rendas familiares dos estudantes de cada estado?

Com SQL isso seria fácil

Com Eloquent ainda mais fácil

Viu como é bem mais simples do que parece? A ideia desse post não é esgotar todas as possibilidade. Tanto o Eloquent quanto o Query Builder são ferramentas super poderosas e vale muito a pena dar uma olhada na documentação. Se você tiver alguma dúvida quanto a utilização desses recursos ou se estiverem com alguma dúvida de como montar uma query complexa no Eloquent, comentem aqui abaixo. Eu ou outro usuário mais experiente podemos lhe ajudar 🙂

Espero que tenham gostado e até a próxima!!!

Paulo Reis

13 comentários

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Your Header Sidebar area is currently empty. Hurry up and add some widgets.