Relacionamentos do Eloquent
Defina relacionamentos hasOne, hasMany, belongsTo e muitos para muitos.
Relacionamentos do Eloquent é uma aula grátis de PHP Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de PHP Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de PHP Academy inclui 4 aulas no total.
Por que Usar Relacionamentos?
Os relacionamentos do Eloquent permitem consultar Models relacionados usando PHP expressivo em vez de JOINs SQL brutos.
hasOne
Um User tem um Profile. Defina o relacionamento no Model proprietário.
<?php
class User extends Model {
public function profile(): \Illuminate\Database\Eloquent\Relations\HasOne {
return $this->hasOne(Profile::class);
}
}
// Access:
$profile = $user->profile;belongsTo
Um Profile pertence a um User. Defina o relacionamento no Model que contém a chave estrangeira.
<?php
class Profile extends Model {
public function user(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class);
}
}
// Access:
$user = $profile->user;hasMany
Um User tem muitos Posts. É um relacionamento de um para muitos a partir do lado pai.
<?php
class User extends Model {
public function posts(): \Illuminate\Database\Eloquent\Relations\HasMany {
return $this->hasMany(Post::class);
}
}
// Access:
$posts = $user->posts; // CollectionbelongsTo (lado muitos)
Cada Post pertence a um User.
<?php
class Post extends Model {
public function author(): \Illuminate\Database\Eloquent\Relations\BelongsTo {
return $this->belongsTo(User::class, "user_id");
}
}Muitos para Muitos (belongsToMany)
Um Post tem muitas etiquetas, e uma etiqueta pertence a muitos Posts — a ligação é feita por meio de uma tabela intermediária.
<?php
class Post extends Model {
public function tags() {
return $this->belongsToMany(Tag::class);
}
}
// Pivot table: post_tag (post_id, tag_id)
$tags = $post->tags;
$post->tags()->attach($tagId);
$post->tags()->detach($tagId);
$post->tags()->sync([1, 2, 3]);hasManyThrough
Acesse Models relacionados indiretamente: um Country tem muitos Posts por meio de Users.
<?php
class Country extends Model {
public function posts() {
return $this->hasManyThrough(Post::class, User::class);
}
}Relacionamentos Polimórficos
Um Model Comment que pode pertencer a um Post ou a um Video usando relacionamentos polimórficos.
<?php
class Comment extends Model {
public function commentable() {
return $this->morphTo();
}
}
class Post extends Model {
public function comments() {
return $this->morphMany(Comment::class, "commentable");
}
}Consultas pela Existência de Relacionamentos
Consulte Models com base na existência de um relacionamento.
<?php
// Posts that have at least one comment:
$commented = Post::has("comments")->get();
// Posts with >= 3 comments:
$popular = Post::has("comments", ">=", 3)->get();whereHas
Filtre com base nas condições do relacionamento.
<?php
$phpPosts = Post::whereHas("tags", function ($q) {
$q->where("name", "PHP");
})->get();Métodos de Relacionamento vs Propriedades Dinâmicas
$user->posts() retorna o construtor de consultas (você pode encadear operações). $user->posts retorna a coleção carregada.
Resumo
Defina relacionamentos como métodos que retornam hasOne, hasMany, belongsTo ou belongsToMany. Acesse-os como propriedades dinâmicas ou encadeie consultas a partir da chamada do método.
Verificação Rápida
Qual tipo de relacionamento usa uma tabela intermediária?
Perguntas Frequentes
A aula “Relacionamentos do Eloquent” é grátis?
Sim — o texto completo de “Relacionamentos do Eloquent” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de PHP Academy, atualize para CoddyKit PRO. O curso de PHP Academy inclui 4 aulas no total.
O que vou aprender em “Relacionamentos do Eloquent”?
Defina relacionamentos hasOne, hasMany, belongsTo e muitos para muitos. Você pratica PHP Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar PHP Academy?
Nenhuma experiência prévia é necessária. PHP Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Relacionamentos do Eloquent”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de PHP Academy?
Sim. Cada aula de PHP Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Modelos Eloquent e migrações
- CRUD com Eloquent
- Relacionamentos do Eloquent
- Carregamento antecipado e escopos de consulta