Joomla.it Forum
Non solo Joomla... => Database => : tomtomeight 16 Dec 2019, 19:00:32
-
Devo selezionare dei record in base al giorno corrente e nella tabella ho ovviamente il campo giorno. Nel models ho la funzione per ottenere la lista nel frontend, dopo le varie selezioni, permessi, stato, ecc. ho questa query finale:
$query->where('a.state = 1 and a.giorno = lunedi');
purtroppo ottengo questo errore:
0 Unknown column 'lunedi' in 'where clause' Unknown column 'lunedi' in 'where clause'
mentre se per i valori dei giorno metto un valore numerico:
$query->where('a.state = 1 and a.giorno = 2');
Funziona mostrandomi solo i record con valore giorno uguale a 2.
Se però converto i giorni a valori numerici poi non mi piace vedere la lista coi giorni 1, 2, ecc. invece che lunedi, martedi, ecc.
Dove sbaglio nella query?
-
Ho superato il fatto di non poter inserire valori numerici per i giorni, giocando con le stringhe lingua sono riuscito a visualizzare in lista i giorni con valori testuali invece che numerici. Tuttavia poiché devo comunque filtrare i record in base al giorno corrente ho il bisogno che la query deve funzionare anche con valori di confronto non numerici.
Per filtrare in base al giorno corrente e confrontandolo con quello nei record ho utilizzato questa query:if (!Factory::getUser()->authorise('core.edit', 'com_calendario'))
{
// Leggo il giorno corrente.
$oggi = date("now");
$gc = date('d', strtotime($oggi));
$query->where('a.state = 1 and a.giorno = $gc');
}
Ma continua a darmi lo stesso errore:
0 Unknown column '$gc' in 'where clause' Unknown column '$gc' in 'where clause'
-
non è che forse gli va detto che si tratta di una stringa aggiungendo str al codice?
-
Graie giusebos ma non ho capito ove aggiungere str.
-
Ho risolto , ricavando il numero del giorno invece del nome.
Così ottengo quello che mi serve:
if (!Factory::getUser()->authorise('core.edit', 'com_calendario'))
{
// Ricavo il giorno corrente.
$dateTime = new \DateTime('now', new \DateTimeZone('Europe/Berlin'));
$day = $dateTime->format('N');
$query->where('( a.state = 1 )and ( a.giorno LIKE ' . $day . ' )');
} }
Ora devo aggiungere anche il filtro per visualizzare solo i record in base all'ora corrente, ma se ho bisogno apro un altro post.
Grazie
-
quel str ho visto che viene inserito nel codice quando dobbiamo indicare che si tratta di un valore stringa, purtroppo non so come deve essere usato...
-
Il punto era che il where non ne voleva sapere di funzionare con valori stringa, quando la variabile esprime invece un numero ha funzionato, non ho tempo di approfondire perché mi si prospettano altre sfide per questo progetto, in pratica si tratta di ottenere un tabellone degli orari di corsi del giorno mentre si svolgono con visualizzazione solo di quelli in corso, prossimi con indicazione dell'ora di inizio e del tempo mancante alla fine delle stesse.