Filter-Tabs
Verwandeln Sie das optionale abschließende $tab-Argument von where()/or_where() in eine besucherumschaltbare Tab-Leiste über dem Grid.
Basisfilter vs. Tabs
where()/or_where() ohne abschließendes $tab-Argument fügen einen dauerhaften, stets angewendeten, serverseitig durchgesetzten Basisfilter hinzu - HMAC-signiert mit XcrudConfig::$appSecret, sodass ein Besucher ihn nicht durch Bearbeiten der URL erweitern oder entfernen kann. Geben Sie ein $tab-Argument an, und dieselbe Bedingung wird stattdessen zu einer Option in einer benannten, besucherumschaltbaren Tab-Leiste über dem Grid - ein Klick auf einen Tab tauscht die aktive Bedingung aus.
public function where(string $field, ?string $operator = null, ?string $value = null, ?string $tab = null): self
public function or_where(string $field, ?string $operator = null, ?string $value = null, ?string $tab = null): self
Beide akzeptieren entweder den 3-Argumente-Stil mit Symbol/benanntem Operator (=, !=, >, >=, <, <=, oder Codes wie eq/neq/gt/contains/starts/ends) oder eine kombinierte Ein-String-Kurzform nur für Symbol-Operatoren (->where('amount > 500')). Bei der Kurzform landet $tab im sonst ungenutzten 2. Argument-Slot.
Ein Beispiel mit 3 Tabs
Jeder where()-Aufruf, der sich dieselbe Tab-Beschriftung teilt, gehört zu diesem Tab und kombiniert sich mit den anderen genau wie nicht getabbte Aufrufe - per AND, in Aufrufreihenfolge:
$xcrud->where('status', '=', 'active', 'Active');
$xcrud->where('status', '=', 'archived', 'Archived');
$xcrud->where('amount', '>', '0', 'All');
Ein Klick auf "Archived" wendet nur status = 'archived' an; die Bedingung von "Active" wird dabei nicht ebenfalls angewendet. Jeder Tab ist unabhängig signiert und manipulationssicher, genau wie ein gewöhnlicher where()-Aufruf - ein Besucher kann nur zwischen genau den vom Seitenautor freigegebenen Tabs wählen, niemals durch Bearbeiten der URL einen anderen Filter erzwingen.
Ein Tab kann mehr als eine Bedingung kombinieren - zwei where()-Aufrufe mit derselben Beschriftung erzeugen ein echtes AND zwischen ihnen, nicht zwei unabhängige Bedingungen, die zufällig denselben Namen teilen:
$xcrud->where('amount', '>=', '1000', 'Medium');
$xcrud->where('amount', '<=', '50000', 'Medium');
Parameter
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$field | string | - | Spaltenname, oder die gesamte kombinierte Bedingung bei Verwendung der Ein-String-Kurzform. |
$operator | string|null | null | Symbol (=, !=, >, >=, <, <=) oder benannter Code (eq, neq, gt, gte, lt, lte, contains, starts, ends). Bei der Ein-String-Kurzform weglassen. |
$value | string|null | null | Vergleichswert. Bei der Ein-String-Kurzform weglassen. |
$tab | string|null | null | Tab-Beschriftung. Weglassen hält den Aufruf als dauerhaften Basisfilter; ein gesetzter Wert gruppiert die Bedingung unter einem besucherumschaltbaren Tab. |
where_raw() / or_where_raw(): der Roh-SQL-Tab
Manche Bedingungen haben keine "field OP value"-Form - ein IN (Subquery) etwa. where_raw($condition, $tab = null) und or_where_raw($condition, $tab = null) fügen $condition wörtlich (geklammert) in die WHERE-Klausel ein, ganz ohne Parsing, Whitelisting oder Parameterbindung - dasselbe Vertrauensniveau wie das rohe SQL von subselect(). Bauen Sie $condition niemals aus Request-Eingaben zusammen; es muss ein literaler, von Ihnen geschriebener String sein, genau wie jedes andere SQL in Ihrer Codebasis.
public function where_raw(string $condition, ?string $tab = null): self
public function or_where_raw(string $condition, ?string $tab = null): self
$xcrud->where_raw(
'customerNumber IN (SELECT customerNumber FROM payments GROUP BY customerNumber HAVING COUNT(*) > 5)',
'Repeat Customers'
);
Es reist genauso zur API wie eine gewöhnliche where()-Bedingung - Teil desselben Basis-Where-Payloads, abgedeckt von derselben einen HMAC-Signatur - also genauso manipulationssicher, ohne eigene separate Signierung. Es akzeptiert dasselbe optionale abschließende $tab-Argument, um es als Teil eines Filter-Tabs umschaltbar zu machen, und lässt sich normal mit Tabs kombinieren, die aus where() gebaut sind.
Datumsbereich-Tabs
where_raw() ist auch das, was kumulative Datumsbereich-Filter-Tabs (Diese Woche / Diesen Monat / Dieses Jahr) antreibt - siehe Datumsbereichs-Filter für diese Anleitung im Detail.