Schede di Filtro
Trasforma l'argomento finale opzionale $tab di where()/or_where() in una barra di schede commutabile dal visitatore, sopra la griglia.
Filtri di base vs. schede
where()/or_where() senza un argomento finale $tab aggiungono un filtro di base permanente, sempre applicato, imposto lato server - firmato con HMAC tramite XcrudConfig::$appSecret, così un visitatore non può ampliarlo o rimuoverlo modificando l'URL. Aggiungendo un argomento $tab, la stessa condizione diventa invece un'opzione all'interno di una barra di schede denominata e commutabile dal visitatore, visualizzata sopra la griglia - cliccando su una scheda si cambia quale condizione è attiva.
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
Entrambi accettano sia lo stile a 3 argomenti con simbolo/operatore denominato (=, !=, >, >=, <, <=, oppure codici come eq/neq/gt/contains/starts/ends) sia una scorciatoia a stringa unica combinata, solo per gli operatori simbolici (->where('amount > 500')). Con la scorciatoia, $tab occupa il 2° slot di argomento altrimenti inutilizzato.
Un esempio a 3 schede
Ogni chiamata a where() che condivide la stessa etichetta di scheda appartiene a quella scheda e si combina con le altre esattamente come fanno le chiamate senza scheda - in AND, nell'ordine di chiamata:
$xcrud->where('status', '=', 'active', 'Active');
$xcrud->where('status', '=', 'archived', 'Archived');
$xcrud->where('amount', '>', '0', 'All');
Cliccando su "Archived" si applica solo status = 'archived'; non si applica anche la condizione di "Active". Ogni scheda è firmata in modo indipendente e a prova di manomissione, esattamente come una normale chiamata a where() - un visitatore può solo scegliere tra le schede esattamente approvate dall'autore della pagina, mai forgiare un filtro diverso modificando l'URL.
Una scheda può combinare più di una condizione - due chiamate a where() che condividono un'etichetta producono un vero AND tra loro, non due condizioni indipendenti che casualmente condividono un nome:
$xcrud->where('amount', '>=', '1000', 'Medium');
$xcrud->where('amount', '<=', '50000', 'Medium');
Parametri
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$field | string | - | Nome della colonna, oppure l'intera condizione combinata quando si usa la scorciatoia a stringa unica. |
$operator | string|null | null | Simbolo (=, !=, >, >=, <, <=) o codice denominato (eq, neq, gt, gte, lt, lte, contains, starts, ends). Da omettere quando si usa la scorciatoia a stringa unica. |
$value | string|null | null | Valore da confrontare. Da omettere quando si usa la scorciatoia a stringa unica. |
$tab | string|null | null | Etichetta della scheda. Omettendola, la chiamata resta un filtro di base permanente; impostandola, la condizione viene raggruppata sotto una scheda commutabile dal visitatore. |
where_raw() / or_where_raw(): la scheda SQL grezzo
Alcune condizioni non hanno la forma "campo OP valore" - un IN (subquery), per esempio. where_raw($condition, $tab = null) e or_where_raw($condition, $tab = null) inseriscono $condition testualmente (tra parentesi) nella clausola WHERE, senza alcun parsing, whitelisting o binding dei parametri - lo stesso livello di fiducia dell'SQL grezzo di subselect(). Non costruire mai $condition a partire dall'input della richiesta; deve essere una stringa letterale scritta da te, esattamente come qualsiasi altro SQL nella tua codebase.
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'
);
Viaggia verso l'API allo stesso modo di una normale condizione where() - parte dello stesso payload base delle where, coperto dalla stessa unica firma HMAC - quindi è altrettanto a prova di manomissione, senza una firma separata propria. Accetta lo stesso argomento finale opzionale $tab per renderla commutabile come parte di una scheda di filtro, e si compone con le schede create con where() nel modo consueto.
Schede per intervallo di date
where_raw() è anche ciò che alimenta le schede di filtro per intervallo di date cumulativo (Questa Settimana / Questo Mese / Quest'Anno) - vedi Filtri per Intervallo di Date per quella spiegazione specifica.