---
title: "Databázové pomocníky — Package Toolkit for Laravel | Roundly"
description: "Enum DatabaseDriver na vetvenie podľa drivera a whereLikeEscaped() — prenosné vyhľadávanie podreťazca odolné voči injekcii."
url: https://roundly-consulting.com/sk/open-source/navody/package-toolkit-for-laravel/databazove-pomocniky
language: sk
---

[Všetky balíky](https://roundly-consulting.com/sk/open-source.md)

[Package Toolkit for Laravel](https://roundly-consulting.com/sk/open-source/navody/package-toolkit-for-laravel.md)

# Databázové pomocníky

## DatabaseDriver

DatabaseDriver modeluje drivery, pre ktoré balík môže potrebovať osobitnú vetvu. Postgres je zvyčajne výnimkou (natívny ILIKE, funkčné indexy), preto sa isPgsql() číta lepšie než porovnávanie magických reťazcov:

| Prípad | Názov drivera |
| --- | --- |
| `DatabaseDriver::Mariadb` | mariadb |
| `DatabaseDriver::Mysql` | mysql |
| `DatabaseDriver::Pgsql` | pgsql |
| `DatabaseDriver::Sqlite` | sqlite |

```php
use Illuminate\Support\Facades\DB;
use RoundlyConsulting\PackageToolkit\Enums\DatabaseDriver;

// Boot / console / migration paths — may fail loudly:
if (DatabaseDriver::current()->isPgsql()) {
    // Postgres-only branch
}

DatabaseDriver::current(DB::connection('reporting'));   // a specific connection

// Request paths — degrade to the portable branch instead of throwing:
$isPgsql = DatabaseDriver::tryFrom($connection->getDriverName())?->isPgsql() ?? false;
```

current() prečíta zadané spojenie — alebo predvolené — a pre driver, ktorý enum nemodeluje, vyhodí InvalidConfigurationException. Množina je zámerne uzavretá, kým tá v Laraveli nie (sqlsrv je oficiálny driver, ktorý enum neobsahuje). current() preto volajte len v boote, konzole a migráciách, kde smie zlyhať viditeľne. V ceste requestu použite tryFrom() s prenosnou záložnou vetvou, aby nemodelovaný engine prešiel na prenosné správanie namiesto toho, aby z funkčného endpointu urobil chybu 500.

## whereLikeEscaped()

Vyhľadávanie podreťazca odolné voči injekcii, bezpečné aj pre surový vstup používateľa, ktoré funguje na každom databázovom driveri Laravelu. Zaregistrujte ho cez RegistersBlueprintMacros a máte ho k dispozícii v query aj Eloquent builderi:

```php
use Illuminate\Support\Facades\DB;

// ILIKE on Postgres, LIKE on every other driver (sqlsrv included),
// with the user's % _ \ escaped via ESCAPE '\'.
DB::table('comments')->whereLikeEscaped('body', $term)->get();   // query builder

Comment::query()->whereLikeEscaped('body', $term)->get();        // Eloquent builder

// The third argument sets the boolean — combine matches with OR:
Comment::query()
    ->whereLikeEscaped('title', $term)
    ->whereLikeEscaped('body', $term, 'or')
    ->get();

// "%" stays literal: matches "he%lo there", not "hello world"
Comment::query()->whereLikeEscaped('body', '%lo')->get();
```

- Zástupné znaky % a \_ (aj escape znak \\) z výrazu používateľa sa escapujú, takže hľadaný výraz nikdy nerozšíri zhodu nad doslovný podreťazec. Na SQL Serveri sa escapuje aj \[, pretože T-SQL ho číta ako triedu znakov.
- Zhoda používa na každom driveri explicitnú klauzulu ESCAPE '\\' — SQLite nemá predvolený escape znak, takže obyčajný LIKE by escapované zástupné znaky nechal aktívne.
- Postgres používa ILIKE nad stĺpcom pretypovaným na ::text, rovnako ako vlastný like Laravelu, takže prehľadávať sa dá aj stĺpec typu uuid či integer; každý iný driver vrátane sqlsrv používa LIKE. Pre driver, ktorý enum DatabaseDriver nemodeluje, makro nikdy nevyhodí výnimku — použije prenosnú vetvu s LIKE.
- Nezávislosť od veľkosti písmen zabezpečuje na Postgrese ILIKE; inde závisí od enginu — LIKE v SQLite ignoruje veľkosť písmen len pri znakoch ASCII a MySQL, MariaDB a SQL Server sa riadia collation stĺpca (ich predvolené collation veľkosť písmen nerozlišujú).
- Stĺpec zadáva vývojár a gramatika ho obalí; hľadaný výraz aj escape znak sa viažu ako parametre — vstup používateľa sa nikdy nedostane na miesto identifikátora.

## Bez makier

Tá istá logika je dostupná aj priamo: LikeSearch::apply() pridá klauzulu do ľubovoľného query buildera a LikeEscaper::escape() escapuje výraz pre ručne písanú klauzulu — vždy ho spojte s explicitnou klauzulou ESCAPE:

```php
use Illuminate\Support\Facades\DB;
use RoundlyConsulting\PackageToolkit\Support\LikeEscaper;
use RoundlyConsulting\PackageToolkit\Support\LikeSearch;

// The same clause the macro adds, on any query builder:
LikeSearch::apply(DB::table('comments'), 'body', $term);

// Escape a term yourself (\, % and _) — always pair it with an explicit ESCAPE:
$needle = '%'.LikeEscaper::escape($term).'%';
DB::table('comments')->whereRaw('body like ? escape ?', [$needle, '\\']);
```

## Prejavte lásku k open source

Tento balík je zadarmo pod licenciou MIT. Ak vám šetrí čas, jednorazový príspevok alebo členstvo na Patreone nám pomôže ho ďalej udržiavať, testovať a dokumentovať.

[Ďalšie spôsoby podpory vrátane kryptomien](https://roundly-consulting.com/sk/podporte-nas.md)

Odoslaním daru súhlasíte s našimi [podmienkami prijímania darov](https://roundly-consulting.com/sk/podmienky-darov.md).

[Podporte našu open-source prácu (otvorí sa v novej karte)](https://donate.stripe.com/dRmeVe8FX5PF1Qd9pXcEw00) [Pridajte sa k nám na Patreone (otvorí sa v novej karte)](https://www.patreon.com/cw/roundly)

## Chcete to zabudovať do svojho produktu?

Naše balíky integrujeme do zákazkových Laravel a AI riešení. Napíšte nám, na čom pracujete, a ozveme sa do 48 hodín.

[Ponuka do 48 hodín](https://roundly-consulting.com/sk/kontakt.md) [Prezrieť všetky balíky](https://roundly-consulting.com/sk/open-source/navody/package-toolkit-for-laravel.md)
