Site

ORM — Consultas ao Banco

v4

O 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étodoDescriçã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