Back to KB
Difficulty
Intermediate
Read Time
4 min

Seu status de pedido não devia ser uma string

By Codcompass Team··4 min read

Quantos jeitos de escrever "pendente" existem no seu banco?

Abre a tabela de pedidos aí do seu projeto e dá uma olhada na coluna status. Aposto que você acha pending, Pending, talvez um pendente perdido de quando o cliente pediu pra traduzir, e vai saber, um pnding que passou batido numa madrugada.

Isso acontece porque status virou uma string solta. Qualquer um pode escrever qualquer coisa ali. Não tem trava, não tem autocomplete, não tem ninguém pra dizer "opa, esse valor não existe".

Já perdeu meia hora caçando um bug que era só um paid escrito payed? Senta aí, porque o PHP 8.1 resolveu isso e o Laravel abraçou a solução com carinho.

O reino da string mágica

O cenário clássico. Status espalhado como texto puro pelo código inteiro:

// No controller
$pedido->status = 'pending';

// No outro controller
if ($pedido->status === 'paid') {
    // ...
}

// Naquela blade
@if($pedido->status == 'canceled')

// E no service, com um pequeno "typo" que ninguém viu
$pedido->update(['status' => 'canceld']);

Enter fullscreen mode Exit fullscreen mode

Cada um desses 'pending', 'paid', 'canceled' é o que a gente chama de string mágica: um valor cru, sem significado formal, que você reza pra ter digitado certo.

E o problema não é só o typo. É que nada te avisa dos valores possíveis. Chegou dev novo no time? Ele vai ter que caçar no grep quais status existem. Mudou paid pra payment_confirmed? Boa sorte achando os 23 lugares.

A meia-solução que muita gente usa

Aí você lembra das constantes e pensa "já resolvi isso":

class Pedido extends Model
{
    const STATUS_PENDING  = 'pending';
    const STATUS_PAID     = 'paid';
    const STATUS_CANCELED = 'can

🎉 Mid-Year Sale — Unlock Full Article

Base plan from just $4.99/mo or $49/yr

Sign in to read the full article and unlock all 635+ tutorials.

Sign In / Register — Start Free Trial

7-day free trial · Cancel anytime · 30-day money-back