---
title: "Dopyty a vyhľadávanie — Translatable for Laravel | Roundly"
description: "Scopy pre jednotlivé jazyky nezávislé od databázy, scope pre chýbajúce jazyky a doslovné vyhľadávanie bez ohľadu na veľkosť písmen."
url: https://roundly-consulting.com/sk/open-source/navody/translatable-for-laravel/dopyty-a-vyhladavanie
language: sk
---

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

[Translatable for Laravel](https://roundly-consulting.com/sk/open-source/navody/translatable-for-laravel.md)

# Dopyty a vyhľadávanie

## Query scopy

HasTranslations pridáva tri scopy nad JSON cestou, ktoré fungujú na každej podporovanej databáze. Jazyk je predvolene jazyk aplikácie:

```php
Topic::query()->whereLocale('name', 'Investing', 'en')->get(); // exact per-locale value (locale defaults to app locale)
Topic::query()->whereHasLocale('name', 'sk')->get();           // rows with a non-blank 'sk' value
Topic::query()->whereMissingLocale('name', 'sk')->get();       // rows missing 'sk' (feed an AI-fill queue)
```

Každý scope overí, že pole je prekladateľné (inak NotATranslatableAttributeException), a skontroluje formát jazyka (InvalidLocaleException), takže jazyk z requestu sa do výrazu JSON cesty nikdy nedostane neoverený. Odovzdajte samotný názov atribútu: scopy aj Translatable::search() pred neho doplnia tabuľku modelu (topics.name->en), takže fungujú aj v dopyte s joinom na inú tabuľku so stĺpcom name. whereMissingLocale() sa prirodzene hodí k fronte na dopĺňanie prekladov:

```php
Topic::query()
    ->whereMissingLocale('description', 'sk')
    ->each(fn (Topic $topic) => FillMissingTranslations::dispatch($topic, 'description'));
```

## Vyhľadávanie naprieč jazykmi

Translatable::search() pridá vyhľadávanie bez ohľadu na veľkosť písmen v jednom či viacerých poliach a vo všetkých podporovaných jazykoch — ilike na PostgreSQL, like nad malými písmenami na MySQL a SQLite:

```php
use RoundlyConsulting\Translatable\DataTransferObjects\TranslationSearch;
use RoundlyConsulting\Translatable\Facades\Translatable;

$topics = Translatable::search(
    Topic::query(),
    new TranslationSearch(fields: ['name', 'description'], term: 'invest'),
)->get();

// The term is a literal substring — this matches "100%", not every row:
Translatable::search(Topic::query(), new TranslationSearch(fields: ['name'], term: '100%'))->get();
```

Výraz sa berie ako doslovný podreťazec: %, \_ a \\ sa escapujú a SQL explicitne uvádza escape znak, takže hľadanie 100% alebo a\_b nájde presne tieto riadky na každej databáze — vrátane SQLite, ktorá nemá predvolený escape znak pre LIKE. Hľadaný výraz sa vždy viaže ako parameter; do SQL sa dostane len názov poľa, overený ako obyčajný identifikátor. Vyhľadávanie bez polí (alebo bez podporovaného jazyka) nič nehľadá a nevráti žiadne riadky — nikdy nie všetky.

ilike na PostgreSQL a lower() na MySQL ignorujú veľkosť písmen aj pri znakoch s diakritikou, takže čaj nájde Čaj. Vstavaná funkcia lower() v SQLite prevádza na malé len písmená ASCII, preto tam nie — test vyhľadávania s diakritikou na SQLite tak nenájde zhody, ktoré PostgreSQL a MySQL nájdu.

## 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/translatable-for-laravel.md)
