Operações com Relações
v4Depois de definir o relacionamento no model, você manipula registros vinculados chamando o método da relação com parênteses: create(),update(), delete(), attach(), etc.
⚠️Nomenclatura v4
Use has_one, has_many, belongs_toe belongs_to_many — tudo em snake_case. Nomes antigos comoattach_one, related_to não existem mais.
has_many — um para muitos
O model pai possui vários filhos. A chave estrangeira fica na tabela filha.
public function order_items()
{
return $this->has_many(
order_item::class,
'customer_id',
'id'
);
}// has_many — o pai cria/atualiza/deleta os filhos
$customer->order_items()->create(['name' => 'Plano Pro', 'price' => 99]);
$customer->order_items()->update(['active' => 0]);
$customer->order_items()->delete();ℹ️create()
A FK
customer_id é preenchida automaticamente com o id do pai.has_one — um para um
O pai possui um único registro relacionado. Mesmos métodos dohas_many.
// has_one — um único registro relacionado
$customer->billing_profile()->create(['company' => 'Acme Ltda']);
$customer->billing_profile()->update(['company' => 'Nova Empresa']);
$customer->billing_profile()->delete();belongs_to — pertence a (inverso)
O model atual é o filho — tem a FK apontando para o pai.
public function customer()
{
return $this->belongs_to(
customer::class,
'customer_id',
'id'
);
}// belongs_to — o filho opera no pai (inverso)
$order->customer()->create(['name' => 'João Silva', 'email' => 'joao@email.com']);
$order->customer()->update(['name' => 'João Santos']);
$order->customer()->delete();belongs_to_many — muitos para muitos
Usa tabela pivô. Exemplo: posts e tags, usuários e permissões.
public function tags()
{
return $this->belongs_to_many(
tag::class,
'post_tag',
'post_id',
'tag_id'
);
}// belongs_to_many — tabela pivô
$post->tags()->attach(1);
$post->tags()->attach([1, 2, 3]);
$post->tags()->attach(1, ['sort_order' => 10]);
$post->tags()->detach(1);
$post->tags()->detach();
$post->tags()->sync([1, 4]);
$post->tags()->toggle([10]);Acesso vs operação
| Sintaxe | Uso |
|---|---|
| $customer->order_items | Lê os dados (lazy load) |
| $customer->order_items() | Opera: create, update, delete |
Resumo rápido
// has_one / has_many
$model->relacao()->create([]);
$model->relacao()->update([]);
$model->relacao()->delete();
// belongs_to (inverso)
$model->relacao()->create([]);
$model->relacao()->update([]);
$model->relacao()->delete();
// belongs_to_many (pivô)
$model->relacao()->attach($id);
$model->relacao()->detach($id);
$model->relacao()->sync([1, 2]);
$model->relacao()->toggle([5]);Definição dos tipos em Relacionamentos.