Relazione Molti a molti (Many to Many) e Dadabik

Rox

New member
Ciao,
scusate la domanda banale, ma ho cercato sul forum e on-line e non riesco a venire a capo di queste relazioni many to many.

Ho creato le seguenti tabelle:
Tabella Prodotto
Id_Prodotto (valore autoincrementale)
Nome_prodotto (campo testo)

Tabella Negozio
Id_Negozio (valore autoincrementale)
Nome_negozio (campo testo)
Prodotti_disponibili (campo testo)

Tabella Joint
Id_Joint (valore autoincrementale)
fk_Prodotto (collegato con il campo Id_Prodotto)
fk_Negozio (collegato con il campo Id_Negozio)

Ho configurato i campi in Dadabik come segue:
Form Joint
fk_Prodotto (select_single, Lookup table name = Prodotto, Lookup table primary key field = Id_Prodotto, Lookup table linked fields = Nome_Prodotto)
fk_Negozio (select_single, Lookup table name = Negozio, Lookup table primary key field = Id_Negozio, Lookup table linked fields = Nome_Negozio)

Form_Negozio
Nome_Negozio (text, alfanumerico)
Prodotti_disponibili (select_multiple_checkbox, Lookup table name = Prodotto, Lookup table primary key field = Id_Prodotto, Lookup table linked fields = Nome_Prodotto)

Tutto funziona, ma se inserisco una Master/details view per vedere nel form negozi i prodotti collegati al singolo negozio, non funziona con nessuna configurazione, perchè prende sempre come unico riferimento l'Id_Negozio e lo confronta direttamente con l'Id_Prodotto... In sostanza la tabella Joint non si popola mai... Avete qualche suggerimento e qualche documento da suggerirmi per una lettura?




My system info are:
You are using DaDaBIK version 9.0-Monterosso enterprise, installed on 16-08-2018 (installation code: 0), the latest version of DaDaBIK is 9.0-Monterosso released on 05-07-2018

You are runnning the last release of DaDaBIK

PHP Version: 7.2.7

mysql version: 5.7.21

Web server: Apache/2.2.34 (Unix) mod_wsgi/3.5 Python/2.7.13 PHP/7.2.7 mod_ssl/2.2.34 OpenSSL/1.0.2o DAV/2 mod_fastcgi/mod_fastcgi-SNAP-0910052141 mod_perl/2.0.9 Perl/v5.24.0

Client: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15
 

eugenio

Administrator
Staff member
Ciao,
devi prima di tutto decidere come vuoi gestire a livello di applicazione questa relazione:

1) Il fatto che tu abbia un campo "prodotti disponibili" in negozio suggerisce che tu voglia avere un campo select_multiple dal quale inserire i vari prodotti direttamente dalla form negozio (di solito questa è la tecnica che si usa se, per ogni negozio, hai pochi prodotti)

2) Il fatto che tu abbia una tabella "JOIN" suggerisce invece che tu voglia utilizzare l'approccio master/details

Se vuoi utilizzare master/details il campo prodotti_disponibili non ti serve, viceversa se vuoi utilizzare il select_multiple non ti serve la tabella join.

Prova a descrivere cosa vuoi ottenere come risultato finale, a livello di applicazione.

Ciao
 

Rox

New member
Ciao,
resto nell'esempio negozio/prodotti perchè è più semplice da spiegare per me.. In questa fase sto studiando l'applicazione per capire meglio come usarla per un progetto che ho in mente da tempo.

Io vorrei che l'utente, mentre compila il form del negozio (form abbastanza complesso), possa scegliere uno o più prodotti da associare al negozio (i prodotti per singolo negozio non sono molti). Vorrei, inoltre, che qualora non ci fosse il prodotto desiderato, l'utente potesse crearlo senza dover abbandonare il form del negozio e ricominciare da zero (andrebbe bene anche aprendo una nuova pagina e poi tornando al form per proseguire l'inserimento).

Da quel che ho capito è la tipica relazione "many to many" (più negozio possono avere più prodotti, con molteplici sovrapposizioni), per questo ho creato la tabella Join. Esteticamente preferirei il campo select_multiple_menu con attivata l'opzione User-friendly searchable, ma non saprei come gestire la creazione di nuovi prodotti in maniera corretta senza perdere i valori nel frattempo inseriti nel form negozio.

Qualche suggerimento?
 

eugenio

Administrator
Staff member
Ciao,
se utilizzi select_multiple_menu in effetti non puoi "al volo", nella form stessa, inserire un nuovo prodotto non esistente. L'opzione "Other choices allowed" nella select_multiple è nella "to do list" di DaDaBIK (per la select_single esiste già) ma non è pianificata per il momento. Considera che probabilmente dovresti inserire non solo una descrizione del prodotto ma anche altre informazioni quindi probabilmente "insert other" così come è implementato ora per la select_single non basterebbe comunque.

Probabilmente in un'implementazione reale non è così frequente dover inserire al volo il prodotto dal negozio, quindi l'utente potrebbe prima inserire gli eventuali prodotti e poi modificare il negozio.

L'alternativa è appunto la master details: in questo caso avresti una tabella negozi_prodotti (o "join", se preferisci) e in negozi dovresti, per il campo id_negozio, compilare la sezione master / details "agganciando" la tabella negozi_prodotti. In questo caso, essendo il campo id_prodotto della negozi_prodotti una select_single, potresti attivare l'opzione "Other choices allowed" in form configurator (vedi sopra).

Buona giornata,
 

Rox

New member
Grazie, sono riuscito ad implementare correttamente la master/details view... Probabilmente, per la mia esigenza, la strana migliore resta quella del multiple select e della creazione di un campo ad hoc che chieda se serva inserire un valore nuovo e in caso di risposta affermativa apra un mini form in cui inserire il nuovo valore che venga caricato nella corretta tabella. Di questo stiamo discutendo (in inglese) nel post https://dadabik.com/forum/read.php?1,20441

Buon lavoro
 

eugenio

Administrator
Staff member
Ok. Considera però che anche se tu aprissi una pagina per aggiungere il prodotto, non te lo troveresti nella tua form negozio (campo select_multiple) a meno di non ricaricare la pagina.

Ciao e buon lavoro.
 
Top