Relacionamentos entre Models
v4Relacionamentos conectam tabelas do banco. Métodos sempre em snake_casee classes em lowercase: customer::class, não Customer::class.
Tipos disponíveis
has_one()
has_many()
belongs_to()
belongs_to_many()$customer = customer::find(1);
$customer->billing_profile;
$customer->order_items;
$post->tags;has_one — um para um
public function billing_profile()
{
return $this->has_one(billing_profile::class, 'customer_id', 'id');
}
// Uso:
$customer->billing_profile;has_many — um para muitos
public function order_items()
{
return $this->has_many(order_item::class, 'customer_id', 'id');
}
// Uso:
$customer->order_items;Retorna uma collection com métodos como filter(), pluck(), sum(). Veja Collections.
belongs_to — pertence a
public function customer()
{
return $this->belongs_to(customer::class, 'customer_id', 'id');
}
// Uso:
$order->customer;belongs_to_many — muitos para muitos
public function tags()
{
return $this->belongs_to_many(
tag::class,
'post_tag',
'post_id',
'tag_id'
);
}
// Uso:
$post->tags;
$post->tags()->attach(1);
$post->tags()->sync([1, 2]);Operações na pivô em Operações de Relação.
Parâmetros
has_many(model::class, foreign_key, local_key)
has_one(model::class, foreign_key, local_key)
belongs_to(model::class, foreign_key, owner_key)
belongs_to_many(model::class, pivot_table, foreign_key, related_key)Eager loading
Carregue relações antes de usar na view para evitar consultas extras:
$customers = customer::with(['order_items', 'billing_profile'])->get();Boas práticas
- Métodos de relação em snake_case:
billing_profile(),order_items() - Classes em lowercase:
order_item::class - Use
with()em listagens - Nomes no singular para
has_one/belongs_to, plural parahas_many