Come creare nuove field da frontend

Buongiorno a tutti, sono felice che ci sia una parte di forum in italiano (non sono molto bravo con l’inglese :sweat_smile:). Uso da pochissimo bubble.io e sto cercando di crearmi una piccola applicazione che mi aiuti nel mio lavoro. Chiedo a voi più esperti se mi potete aiutare. Ho creato un database per calcolare il costo di alcune ricette, quindi per ogni ricetta ho diversi ingredienti che vado a grammare ed a calcolarne il costo in base alla quantità e questo è fatto. Il problema è che non so mai quanti ingredienti avrò in una ricetta quindi dovrei fare una moltitudine di righe con: ingrediente1-quantità1-costo al kg1-costo unitario1 ma queste potrebbero essere 1 o 3 o 1000 quindi la domanda è: per non stare a creare 1000 righe, posso fare in modo che da frontend io metta un tasto aggiungi riga e che poi nel database crei da solo ingrediente2-quantità2-ecc ecc? E se si come? Grazie in anticipo a chi volesse rispondermi.

Ciao, benvenuto.

Quando stai aggiungendo funzionalita’ al sito e’ importante iniziare col pensare al Backend e alla struttura del database prima di pensare al frontend.

In questo caso, aggiungere righe ‘Ricette’ non e’ una soluzione adeguata. Come hai ben detto, non ci sta modo di sapere quante righe dovresti aggiungere, e pure se lo sapessi, tutte quelle righe vuote sarebbero molto inefficienti.

Crea una tabella nel database per ‘alimento’ dove puoi salvare il nome, costo e tutto quello che vuoi di un certo alimento

Crea una tabella nel database per ‘ingrediente’. In questa tabella crea un link ad un ‘alimento’ ed ad una ‘ricetta’. Qua potrai salvare la quantita’ di quest alimento che serve per la ricetta.

Nella tabella ricetta, crea un link ad una lista di ‘ingredienti’.

Questa e’ un infarinatura ad una struttura di un database piu’ adeguata ai tuoi bisogni. Pero’ ti consiglio di leggere di piu sul argomento generale.
Alimenti e ricette sono in una ‘many to many relationship’, perche ricette hanno molteplici alimenti, e gli alimenti possono stare in molteplici ricette. In questo caso e’ utile create un ‘linking table’ (ingredienti) per piu’ facilmente conservare i dati nel database.

Se hai altre domande fammi sapere. Scusa il mio italiano e’ un po’ arrugginito ed ho una tastiera senza accenti.

Grazie mille par la tua risposta e per la velocità, sei stato gentilissimo ma sicuramente non mi sono spiegato bene io. Provo a farti capire meglio così vediamo se riesci ad aiutarmi. Io ho un db Ricette dove ci sono i campi (RICETTA1 - INGREDIENTE 1 - COSTO AL KG 1 - QUANTITA 1 - COSTO X QUANTITA 1 - INGREDIENTE 2 - COSTO AL KG 2 - QUANTITA 2 - COSTO X QUANTITA 2 - INGREDIENTE 3 - COSTO AL KG 3 - QUANTITA 3 - COSTO X QUANTITA 3 - e così via) Poi ho un DB ingredienti dove ho (INGREDIENTE - PREZZO) questi due DB sono collegati tra loro.
Ora io ho creato un popup sul quale lavorare ti allego l’immagine


Ogni riga è un ingrediente e i dati vengono salvati nel DB ricette perchè la somma dei costi degli ingredienti mi da il costo totale del piatto.
La domanda è: Ma devo creare per forza tutti i campi di ogni riga nel DB o posso fare in modo che con un’azione da frontend mi crei una riga nuova con tutti i campi e me li crei anche nel DB? Spero di essermi spiegato.
Ancora mille grazie per il tuo aiuto

posso fare in modo che con un’azione da frontend mi crei una riga nuova con tutti i campi e me li crei anche nel DB

Questo non e’ possibile. Il frontend non puo’ mai modificare la struttura del backend. Dovrai aggiungere manualmente tutti i campi che ti servono come hai detto te.

Quello che stavo cercando di dire prima e’ che dovresti cambiare la struttura del tuo database, e poi cambiare il tuo popup per funzionare con il nuovo database.

Cambiare il database vuoldire rifare molto lavoro, e capisco che forse non sei interessato a farlo o non hai tempo di farlo, sopratutto se stai usando l’app per scopo personale. Dipende da te.

Ciao,
mi inserisco nella conversazione.
Non vedo enormi problematiche. Una possibile soluzione, senza pensarci troppo, potrebbe essere come di seguito
0. lascia invariata la tabella “ingredienti”

  1. crea una tabella chiamata ad esempio “proporzioni” che riporti soltanto
    INGREDIENTE: tipo “ingredienti”
    QUANTITA’: tipo numero
  2. modifica la tabella “ricette” con le sole seguenti colonne:
    NOME RICETTA: tipo testo
    INGREDIENTI: tipo lista “proporzioni”
    COSTO TOTALE: tipo numero

Detto questo lato frontend puoi utilizzare un’unica riga (tipo quella cerchiata in rosso da te) e aggiungere:

  1. un tasto chiamato ad esempio “aggiungi” che non fa nient’altro che salvare ma mano gli ingredienti e quantità nella tabella “proporzioni” e aggiungere l’ingrediente appena salvato anche in una lista “custom state”
  2. un tasto chiamato ad esempio “calcola” che moltiplica il costo unitario di ogni singolo ingrediente per la quantità e li somma tutti i prezzi calcolati, salvando (in un unica riga) il nome della ricetta, la lista degli ingredienti e la sommatoria dei prezzi calcolati nella tabella “ricette”

Questa è la soluzione che ti obbliga a ricalcolare solo il prezzo finale della ricetta, nel caso in cui un giorno cambi un prezzo di un qualsiasi ingrediente. Alternativamente (ed è un po’ più facile ma io non lo farei), puoi salvare nella tabella “propozioni” anche il prezzo del singolo ingrediente già calcolato in funzione della quantità. Se in futuro cambi il prezzo di un solo ingrediente però, la quantità di dati che dovrai aggiornare sarà enorme.

Queste soluzioni sono ovviamente perfettibili e forse riflettendoci e lavorandoci su, si può sicuramente fare meglio.
Fammi sapere!! :smiley:

Dario

Grazie a tutti ragazzi, mi avete dato molti spunti utili. Intanto rivedrò anche i DB e soprattutto studierò come funzionano i database poi proverò entrambe le soluzioni. Grazie Grazie Grazie