Site

Operações com Relações

v4

Depois 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

SintaxeUso
$customer->order_itemsLê 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.