NovinkaZverejnili sme 50+ Laravel balíkov ako open source
Custom AI apps, agents and automation — Roundly ConsultingRoundly
Všetky balíky
Package Toolkit for Laravel

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ípadNázov drivera
DatabaseDriver::Mariadbmariadb
DatabaseDriver::Mysqlmysql
DatabaseDriver::Pgsqlpgsql
DatabaseDriver::Sqlitesqlite
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:

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, každý iný driver vrátane sqlsrv 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:

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

Odoslaním daru súhlasíte s našimi podmienkami prijímania darov.

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.