ORM — Consultas ao Banco
v4O ORM (Object-Relational Mapping) permite trabalhar com o banco usando métodos simples em vez de escrever SQL manualmente. Cada modelrepresenta uma tabela.
Consultas básicas
// Buscar todos
shop_item::query()->get();
shop_item::all();
// Por ID
$item = shop_item::find($id);
$item = shop_item::find_or_fail($id); // erro se não existir
// Filtros
shop_item::where('active', 1)->order_by('name')->get();
shop_item::where('price', '>=', 100)->first();
shop_item::where_in('id', [1, 2, 3])->get();Criar, atualizar e deletar
// Criar
$item = shop_item::create(['name' => 'Sword', 'price' => 500]);
// Atualizar
$item->price = 600;
$item->save();
// Deletar
$item->delete();Relacionamentos
Conecte tabelas com has_one(), has_many(), belongs_to()e belongs_to_many(). Guia completo emRelacionamentos.
⚠️Nomes antigos (removidos na v4)
attach_one(), attach_many(), related_to() erelated_to_many() não existem mais. Use os métodos em snake_case acima.
Eager loading — evite consultas extras
Quando você acessa uma relação sem carregá-la antes, o ORM faz uma consulta extra ao banco. Em listas com muitos registros isso fica lento. Use with():
// Sem with() — uma query extra por usuário (lento em listas)
$users = user::limit(10)->get();
foreach ($users as $user) {
echo $user->characters->count(); // query extra!
}
// Com with() — carrega tudo de uma vez (recomendado)
$users = user::with('characters')->limit(10)->get();
foreach ($users as $user) {
echo $user->characters->count(); // sem query extra
}Paginação
$items = market_item::where('active', 1)
->order_by('created_at', 'DESC')
->paginate(15);
// Na view:
<?php foreach ($items as $item): ?>
...
<?php endforeach; ?>
<?= $items->links() ?>Detalhes em Paginação.
Transações
Quando várias operações precisam funcionar juntas (ou nenhuma acontece):
DB::transaction(function () {
$user->decrement_coins(100);
shop_order::create([...]);
return true;
});Referência rápida do query builder
| Método | Descrição |
|---|---|
| where() | Filtrar registros |
| where_in() | Valor em lista |
| order_by() | Ordenar resultados |
| limit() / offset() | Paginação manual |
| with() | Carregar relações junto |
| where_has() | Filtrar por relação |
| first() / get() | Buscar um ou vários |
| paginate() | Paginação automática |