Dotazy Laravel kde LIKE, před a po Laravel 11/12

Dotazy typu Where LIKE v systému Laravel Při práci s databázemi v Laravelu je jednou z nejčastějších potřeb vyhledávání záznamů pomocí příkazu SQL LIKE klauzule. To umožňuje prová...

Poptat web

30. 09. 2025

Dotazy Laravel kde LIKE, před a po Laravel 11/12

Dotazy typu Where LIKE v systému Laravel

Při práci s databázemi v Laravelu je jednou z nejčastějších potřeb vyhledávání záznamů pomocí příkazu SQL LIKE klauzule. To umožňuje provádět částečné shody - například vyhledat všechny uživatele, jejichž jména začínají na "John".

V tomto příspěvku prozkoumáme, jak používat where like dotazy v systému Laravel, jak to fungovalo před Laravelem 11 a 12 a co se v těchto novějších verzích změnilo. Budeme se také zabývat dotazy LIKE nerozlišující velká a malá písmena, dotazy LIKE s více sloupcia novější whereAny / whereAll / whereNone doložky.

Použití LIKE v Laravelu před verzemi 11 a 12

Před verzemi Laravel 11 a 12 bylo nutné použít příkaz where metoda s LIKE obsluha ručně:

// Find users whose names start with "John"
$users = User::where('name', 'LIKE', 'John%')->get();
 
// Find users whose email contains "gmail"
$users = User::where('email', 'LIKE', '%gmail%')->get();

Použití whereLike v Laravel 11 a 12

Z Laravel 11 a 12, Eloquent představil výraznější whereLike a orWhereLike syntaxe:

// Find users whose names start with "John"
$users = User::whereLike('name', 'John%')->get();
 
// Find users whose email contains "gmail"
$users = User::whereLike('email', '%gmail%')->get();

Dotazy LIKE nerozlišující velká a malá písmena

Rozlišování malých a velkých písmen u dotazů LIKE závisí na tom, zda je v databázi použita funkce collation. Například MySQL utf8mb4_unicode_ci sjednocení je rozlišování velkých a malých písmen ve výchozím nastavení.

Pokud chcete výslovně vynutit nerozlišuje velká a malá písmena jako dotazy, můžete použít LOWER():

// Case insensitive search for "john"
$users = User::whereRaw('LOWER(name) LIKE ?', ['%john%'])->get();

Nebo ji zkombinujte s novou whereLike:

$users = User::whereLike(DB::raw('LOWER(name)'), '%john%')->get();

Dotazy LIKE na více sloupců

Někdy chcete hledat napříč více sloupců, jako je jméno or e-mail.

Před Laravelem 11 a 12:

$users = User::where('name', 'LIKE', '%john%')
->orWhere('email', 'LIKE', '%john%')
->get();

Od verze Laravel 11 a 12:

$users = User::whereAny(['name', 'email'], 'LIKE', '%john%')->get();
 
$users = User::whereAll(['name', 'email'], 'LIKE', '%john%')->get();

Souhrn

  • Před Laravelem 11 a 12: Použijte where('column', 'LIKE', 'pattern').
  • Laravel 11 a 12+: Použijte whereLike a orWhereLike pro čistší syntaxi.
  • Nerozlišuje velká a malá písmena: Použijte LOWER() s nezpracovanými dotazy, pokud se nerozlišují velká a malá písmena.
  • Více sloupců: Použijte whereAny(['col1', 'col2'], 'LIKE' 'pattern').
  • Pokročilé: Použijte whereAny, whereAlla whereNone pro vícesloupcové dotazy LIKE s logikou OR, AND nebo NOT.

Původní článek publikoval Nabil Hassen.