Posted on: April 30, 2026 11:14 AM
Posted by: Renato
Categories: Laravel
Views: 48
Laravel Eloquent: Ganhando Legibilidade com o Método whereBelongsTo()
No desenvolvimento com Laravel, a busca por um código limpo e expressivo é constante. Muitas vezes, ao filtrar registros baseados em relacionamentos, recorremos ao tradicional where('foreign_key_id', $model->id). Embora funcional, o Laravel oferece uma alternativa mais elegante e legível: o método whereBelongsTo().
O Problema: Repetição de Colunas ID
É comum encontrarmos consultas que se parecem com isto:
PHP
// Antes
Order::query()
->where('user_id', $user->id)
->where('book_id', $book->id)
->where('status', 'paid')
->exists();
Embora o código acima seja claro, ele nos obriga a lembrar e digitar manualmente o nome da coluna de chave estrangeira (user_id, book_id). Isso abre margem para erros de digitação e torna o código mais "barulhento".
A Solução: whereBelongsTo()
O método whereBelongsTo() permite que o Eloquent determine automaticamente a chave estrangeira correta baseada na instância do modelo que você passa como argumento.
PHP
// Depois
Order::query()
->whereBelongsTo($user)
->whereBelongsTo($book)
->paid() // Usando um Scope para ainda mais clareza
->exists();
Por que usar?
-
Legibilidade: O código lê-se quase como uma frase em inglês: "Order where belongs to user".
-
Menos Erros: Você não precisa especificar a string da coluna (
user_id). O Laravel resolve isso para você. -
Refatoração Amigável: Se você alterar o nome da sua chave estrangeira no modelo, o
whereBelongsTo()continuará funcionando sem precisar alterar todas as suas queries.
Combinando com Eloquent Scopes
Como observado no exemplo "After" da imagem, a expressividade aumenta drasticamente quando combinamos o whereBelongsTo() com Query Scopes.
Em vez de expor a lógica de negócio na query (where('status', 'paid')), encapsulamos isso no modelo Order:
PHP
// No modelo Order.php
public function scopePaid($query)
{
return $query->where('status', 'paid');
}
Isso transforma uma consulta técnica em uma instrução de alto nível, facilitando a manutenção e a compreensão por outros desenvolvedores da equipe.
Conclusão
O uso do whereBelongsTo() é uma vitória sutil, mas poderosa, para a legibilidade do seu projeto. Ele reforça o uso de padrões modernos do Laravel 12+, como a tipagem estrita e a promoção de propriedades, garantindo que o seu back-end seja não apenas eficiente, mas também elegante.
Embora seja uma preferência pessoal, adotar esse estilo aproxima seu código da filosofia "fluida" que torna o ecossistema Laravel tão popular entre desenvolvedores Full-Stack.
Donate to Site
Renato
Developer