Časté chyby začátečníků v Laravelu

Laravel odpouští hodně, ale pár chyb dělá skoro každý začátečník. Sepsal jsem ty nejčastější od logiky v kontroleru po N+1 dotazy a ukazuji, jak je dělat správně.
Publikováno 31.08.2026

Časté chyby začátečníků v Laravelu

Publikováno

· Autor: · Pod kapotou · Základy · 3 min čtení

Obsah článku

Laravel je přívětivý framework, ale právě proto svádí k rychlým řešením, která se později vymstí. Když všechno „nějak funguje", je snadné přehlédnout, že kód je časovaná bomba. Sám jsem si těmi chybami prošel, takže to není kritika shora — spíš zkratka, jak nešlápnout do stejných děr. Sepsal jsem ty, které vídám nejčastěji, a hlavně jak je dělat správně.

Všechno naházené do kontroleru

Klasika. Kontroler o dvou stech řádcích, který validuje, počítá, posílá e-maily a ještě formátuje výstup. Za měsíc se v tom nevyzná nikdo.

// ŠPATNĚ: logika i validace v kontroleru
public function store(Request $request)
{
    $request->validate(['email' => 'required|email']);
    // + dalších 150 řádků logiky
}

// LÉPE: validaci do Form Requestu, logiku do service
public function store(StoreOrderRequest $request, OrderService $orders)
{
    $orders->create($request->validated());
}

Proč používat Form Request místo validace v kontroleru rozebírám v samostatném článku.

Ruční SQL místo Eloquentu

Začátečník přicházející z čistého PHP často skládá SQL ručně, protože je to zvyk. Přitom Eloquent je čitelnější, kratší a chrání databázi před útoky sám tím, že hodnoty do dotazu předává bezpečně. Ruční SQL má své místo u opravdu složitých dotazů, ale u běžné práce s modely je to zbytečné riziko i práce navíc.

// ŠPATNĚ: ruční a zranitelné
$users = DB::select("SELECT * FROM users WHERE email = '$email'");

// LÉPE: čitelné a bezpečné
$users = User::where('email', $email)->get();

Ruční skládání SQL navíc otevírá dveře útokům přes podvržený vstup — hodnoty proto vždy předávejte přes Eloquent nebo vázané parametry, ne přímo do řetězce dotazu.

N+1 dotazy

Neviditelná chyba, dokud tabulka nemá pár tisíc řádků. Aplikace pak místo dvou dotazů udělá stovky a začne se plazit.

// ŠPATNĚ
$orders = Order::all();
foreach ($orders as $order) {
    echo $order->customer->name; // dotaz navíc pokaždé
}

// LÉPE: eager loading
$orders = Order::with('customer')->get();

Tahle chyba je zákeřná právě tím, že se při vývoji na pár testovacích řádcích neprojeví. Všechno běží svižně, aplikaci pošlete do provozu a po pár měsících, když dat přibude, se začne plazit. Proto se vyplatí ji hlídat od začátku.

Konfigurace a verzování

Poslední skupina chyb je kolem nastavení a odevzdávání kódu. Drobnosti, které umí pořádně potrápit.

  • Nikdy nepoužívejte env() mimo konfigurační soubory — po cachování vrátí null.
  • Soubor .env s hesly nepatří do Gitu.
  • Migrace používejte na každou změnu databáze, ne ruční zásahy.

Nechci ale strašit — nesnažte se od prvního dne psát dokonalý kód podle všech pouček. Důležitější je věci dokončovat a postupně se zlepšovat. Většina zásad, které tu zmiňuji, vám přejde do krve sama, jakmile jednou pocítíte, jak nepořádek bolí při další úpravě. Začínáte s Laravelem a chcete konzultaci? Napište mi na nezávaznou poptávku.