Recupero dati singola cella DB

Salve a tutti,

sono nuovo nel Forum e nella programmazione OO/Yii2, volevo sapere se gentilmente potete darmi qualche delucidazione.

Vorrei esporre le mie 2 problematiche (la prima molto elementare, sono agli inizi):

La prima: vorrei creare una funzione da poter chiamare in modo universale per recuperare un valore di una singola cella da DB data un’altra della stessa riga (ho una tabella OPZIONI, con coppie NOME-VALORE, NOME sempre differente (univoco) ovviamente, mi serve di stampare il VALORE corrispondente a video di un NOME passato come argomento alla funzione, la tabella come tutte è munita anche di ID ma non è comodo ricordarsi l’ID di ogni opzione per ovvi motivi)

come procedo? (ho installato yii2-advanced)

La seconda:

Ho una tabella documenti (colonne ID, NUMERO, ANNO, TIPO e altre)

Sto cercando di realizzare un generatore di documenti numerati consecutivamente (tipo fatture ed altro) e devo recuperare in primis l’ultimo numero generato nella colonna NUMERO (il più alto) della Tabella Documenti riferito ad un determinato anno, per proporre all’utente quale (potrebbe essere) il numero del documento che verrà generato.

La problematica è conosciuta a molti, infatti dovendo essere il programma in multiutenza ho detto ‘potrebbe’ appositamente, poichè nel frattempo qualcun’altro magari ha ‘impegnato’ quel numero effettuando un salvataggio prima di chi lo sta compilando. Il che mi porta ad un altra soluzione: vorrei affiancare alla cella di input un tasto di ‘refresh’ che mi possa aggiornare il campo (magari con jquery) per vedere se l’ultimo numero impegnato è ancora lo stesso, o si dovrebbe realizzare un sistema che in caso di ‘impegno’ mandi un segnale per autoaggiornare il campo e la cosa si complica.

Spero di essermi espresso correttamente

Avete dei suggerimenti per me su quale strada seguire? Un grazie anticipato a tutti!

Ciao, io un numeratore di documenti per anno (un protocollo) l’ho fatto con yii 1.x.

Il mio consiglio è quello di non assegnare né mostrare alcun numero finché l’utente non ha inviato il modulo.

Il numero lo assegni dopo l’invio del modulo e prima di salvare i dati su DB.

Ad operazione avvenuta mostri il risultato (col numero).

Ciao, grazie per la tua risposta innanzitutto!

Ho adottato precedentemente questa tecnica con successo in altro ambito (ASP), però adesso ho comunque necessità di reperire il numero poichè il mio cliente richiede di sapere per motivi organizzativi quanti documenti sono "usciti" almeno orientativamente fino a quel momento prima di fare una nuova emissione.

In sostanza per il punto 2 (e può tornare utile in altri casi), è possibile aggiornare tipo ‘notifica’ (diretta o tramite un evento tipo click su un tasto) il campo in base ad un cambio nel DB con ajax? quale è la strategia?

Certo che è possibile avere un campo il cui valore si aggiorna con ajax.

Aggiungi al controller un’action deputata a rendere l’ultimo numero + 1 e la richiami con jquery dalla view (ci sono vari modi per richiamare uno script, se cerchi “yii2 ajax” su google troverai diversi esempi di codice).

Esiste inoltre un widget che si chiama Pjax, anche se forse le sue specificità vanno oltre quello di cui hai bisogno (consente di gestire le varie chiamate ajax all’interno di una pagina tramite la history del browser).

Ad ogni modo, anche così, non andrei oltre il titolo informativo nell’indicare il numero (magari mostrandolo all’interno di un tag div), la sua assegnazione e registrazione non deve dipendere da cosa ti invia il browser dell’utente, su cui non hai controllo.

Se la necessità è solo questa, stampa a parte il numero di documenti usciti… Inoltre se l’informazione serve solo orientativamente e non precisa, non serve fare aggiornamenti ajax a meno che non emettano decine di protocolli al minuto.

Io non darei preventivamente il numero di protocollo: se io sono lento nella compilazione oppure mi chiamano al telefono e ci sto 1 ora prima di cliccare salva e molto facile che il numero cambi. Vai a spiegare all’utente che quel numero di protocollo era solo indicativo…

Il numero di protocollo si crea quando salvi, vale a dire quando il documento viene protocollato.

Se invece la necessità è di avere un numero di protocollo per poter redigere il documento, in alcuni casi è necessario includere il protocollo determinati documenti, puoi fare un sistema di “prenotazione” del protocollo. L’utente prenota il protocollo ed ha il numero definitivo, poi quando ha fatto, anche due giorni dopo, lo completa con l’upload del documento.

Comunque se hai necessità di far vedere far vedere informazioni aggiornate hai 3 possibilità:

[list=1][]aggiornamento puntuale: l’utente clicca su un bottone e l’informazione viene aggiornata via ajax, PRO facile implementazione, CON è necessaria l’azione da parte dell’utente[]aggiornamento schedulato: la funzione di cui sopra viene eseguita ad intervalli regolari (polling) (1, 3, 5 minuti vedi tu), PRO aggiornamento senza azione dell’utente, CON in caso gli utenti siano molti e il tempo scelto breve c’è il rischio di sovraccaricare il webserver di richieste[]aggiornamento in tempo reale 1: aggiornamento tramite una chiamata ajax long polling, PRO minor numero di richieste, compatibile con browser più vecchi CON le richieste rimangono aperte a lungo e quindi possibile che venga saturato il numero di connessioni disponibili, c’è una parte di implementazione anche sul server[]aggiornamento in tempo reale 2: l’aggiornamento avviene tramite websocket, (diciamo che websocket è l’evoluzione efficiente del long polling), PRO il rischio di sovraccarico del server viene ridotto il protocollo è fatto apposta per questo mestiere, CONS serve un browser recente, forse ti devi studiare una cosa che non conosci, c’è una parte di implementazione anche sul server[/list]Riguardo websocket e browser:

https://developer.mo…docs/WebSockets , sostanzialmente qualsia browser, nel caso di explorer ti serve almeno la 11

Grazie mille per la tua risposta Roberto. Ho già optato per l’opzione 1 la trovo la più efficiente.

Il vero problema (per me che mi sto avventurando in questo nuovo framework) sembrano essere più che le logiche da utilizzare la familiarizzazione con le operazioni più semplici (perchè abituato a farle in altri modi) tipo dove mettere i codici e le funzioni, come stampare un semplice dato e come prelevarlo da DB ecc… :). In ogni caso sto leggendo tutta la documentazione appena ho tempo e spero di fare rapidi progressi!

Grazie ancora!

Ciao!