Dopyty a vyhľadávanie
Query scopy
HasTranslations pridáva tri scopy nad JSON cestou, ktoré fungujú na akejkoľvek databáze podporovanej Laravelom. Jazyk je predvolene jazyk aplikácie:
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ý. whereMissingLocale() sa prirodzene hodí k fronte na dopĺňanie prekladov:
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 všade inde:
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 a SQL Servera, ktoré nemajú 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.
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 kryptomienOdoslaní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.