-
Notifications
You must be signed in to change notification settings - Fork 7
zakladni prikazy
Lean Mapper Query v out-of-the-box stavu disponuje následujícími příkazy:
whereorderBydescasclimitoffset
Tyto příkazy své argumenty pouze delegují na příslušné metody LeanMapper\Fluent (tedy DibiFluent). Očekávají int a ovlivňují LIMIT respektive OFFSET klauzule v SQL dotazu. Použití tedy např.:
$query->limit(10)
->offset(20);orderBy přepokládá pouze 1 parametr, který je nejprve přeložen a následně delegován do DibiFluent::orderBy. I zde je tedy možné použít tečkovou notaci.
$query->orderBy('@author.name DESC');
// nebo
$query->orderBy('@author.name')->desc();Jak je vidět z příkladu, vzestupnost/sestupnost lze řešit buď přímo v metodě orderBy, nebo na to použít pomocné funkce asc a desc.
Tento příkaz má oproti DibiFluent::where to omezení, že musíme celou restrikci napsat pouze v prvním parametru. Předpokládá se tedy, že všechny ostatní parametry jsou pouze argumenty, které budou nahrazeny na místech příslušných modifikátorů (placeholderů).
// špatně
$query->where('@author.name = %s', 'Karel', 'OR @available', TRUE);
// správně
$query->where('@author.name = %s OR @available = %b', 'Karel', TRUE);Při parsování argumentů příkazu where totiž nelze rozlišit, zda-li se jedná o restrikci nebo pouze parametry.
Používání příkazu where pouze se 2 argumenty je velice časté, proto byly vytvořeny jisté zkratky, které usnadňují jednoduché restrikce.
Následující řádky jsou ekvivalentní:
$query->where('@name = %s', 'PHP');
$query->where('@name = ?', 'PHP');
$query->where('@name =', 'PHP');
$query->where('@name', 'PHP');-
První řádek je napsán standardním způsobem.
-
Na druhém řádku je vidět, že není nutné specifikovat konkrétní modifikátor, ale stačí použít výchozí (
?). O zvolení správného modifikátoru se postará Lean Mapper Query, které typ modifikátoru určí podle typu property definované v entitě. Je tedy schopen rozlišit float, int, string.Speciální volbou je objekt
DateTime, který ve výchozím stavu nahrazuje za modifikátor%t, který tedy předpokládá datum i čas. Pokud by bylo zapotřebí uvažovat pouze datum, lze takovou property v entitě přidat ještě custom flagm:type(date)(tento flag se tedy vyhledává pouze v těch property, které již jsou typuDateTime), který způsobí nahrazení za modifikátor%d.Je důležité zmínit, že tato náhrada modifikátorů funguje pouze u těchto jednoduchých volání příkazu
wherese 2 argumenty. Obecně to zatím nefunguje, protože není jisté, že za každou property (např.@author.name) bude následovat jí příslušící modifikátor. -
Pokud nám vyhovuje výchozí mechanismus náhrady modifikátorů, můžeme modifikátor kompletně vynechat a na konci restrikce definovat pouze operátor. Lze tedy použít např.:
$query->where('@pubdate >=', new DateTime);
-
Pokud je použitý operátor pro porovnání
=, lze vynechat i ten. Na čtvrtém řádku je tedy nejkratší zápis.