Aula 07 - Eloquent ORM 💎
🎯 Objetivo da Aula
Dominar o Eloquent, o ORM (Object-Relational Mapper) do Laravel. Vamos aprender a interagir com o banco de dados usando objetos PHP, sem escrever uma única linha de SQL manual, e entender como gerenciar relacionamentos complexos.
🐘 O que é o Eloquent?
O Eloquent transforma tabelas do banco em classes PHP (Models).
- Uma Tabela produtos vira uma Classe Produto.
- Uma Linha da tabela vira um Objeto dessa classe.
Consultas Básicas
// Buscar todos os produtos
$produtos = Produto::all();
// Buscar pelo ID
$produto = Produto::find(1);
// Criar novo registro
$novo = Produto::create(['nome' => 'Teclado', 'preco' => 150.00]);
🔗 Relacionamentos
Esta é a parte mais poderosa do Eloquent.
| Tipo | Método | Exemplo |
|---|---|---|
| 1 para 1 | hasOne / belongsTo |
Usuário e Perfil. |
| 1 para N | hasMany / belongsTo |
Post e Comentários. |
| N para N | belongsToMany |
Alunos e Disciplinas. |
Exemplo em Código (1:N)
class Post extends Model {
public function comentarios() {
return $this->hasMany(Comentario::class);
}
}
📊 Estrutura de Relacionamento
erDiagram
CATEGORIA ||--o{ PRODUTO : possui
PRODUTO ||--o{ ITEM_PEDIDO : contem
CLIENTE ||--o{ PEDIDO : faz
🔍 Scopes e Soft Deletes
- Scopes: Permitem encapsular lógica de consulta (ex:
Produto::ativos()->get()). - Soft Deletes: Em vez de apagar do banco, o Laravel marca como "excluído" (deleted_at), permitindo recuperação posterior.
Segurança
O Eloquent protege automaticamente contra SQL Injection usando prepared statements.
🧠 Blocos de Destaque
Convenção sobre Configuração
O Eloquent assume que sua tabela é o plural do nome da classe (ex: Model User -> Tabela users). Se fugir desse padrão, você deve definir protected $table.
🛠️ Exercícios Progressivos
- Básico: Crie um Model
Clientee busque todos os clientes ordenados pelo nome. - Intermediário: Implemente um relacionamento onde um
Pedidopertence a umCliente. - Desafio: Crie um Query Scope que retorne apenas produtos com preço acima de R$ 100,00.
🚀 Mini-Projeto da Aula
Sistema de Blog Relacional:
Crie os Models Post e Comentario. Implemente o relacionamento entre eles e crie uma pequena interface (via Controller e Rota) que exiba um post específico e todos os seus comentários logo abaixo, garantindo que tudo seja carregado via Eloquent.