Nell'applicazione che sto creando, gli utenti possono specificare le relazioni tra le tabelle.Come si aggiungono relazioni in fase di esecuzione utilizzando DBIx :: Class e Catalyst?
Poiché l'ho determinato solo in fase di esecuzione, non è possibile specificare has_many o belongs_to nelle relazioni nei moduli dello schema per l'avvio.
Quindi dato due tabelle; sistema e luogo, vorrei aggiungere la relazione per unire i record tra loro.
devo parte della soluzione qui di seguito:
$rs = $c->model('DB::system')->result_source;
$rs->add_relationship('locations','DB::place',{'foreign.fk0' => 'self.id'});
Così la colonna fk0
sarebbe la mappatura chiave esterna al primario posizione chiave id
.
So che ci deve essere una nuova registrazione per consentire l'accesso futuro alla relazione, ma non riesco a capirlo.
Sei sicuro che gli utenti cambino davvero lo schema del database? Questo è esattamente equivalente a consentire loro di modificare il codice sorgente. Non è necessario necessariamente modellare la "propria interfaccia utente" con DBIx :: Class. Probabilmente vorrai sviluppare una rappresentazione intermedia che fornisca la funzionalità che desideri e mantenere il codice e lo schema del database corretti. – jrockway
C'è anche DBIx :: Class :: Schema :: Loader, se si sta monitorando un database che non si controlla, o qualcosa del genere. Ma tieni presente che le modifiche allo schema del database cambieranno il comportamento della tua applicazione. Se il tuo codice è statico e lo schema del tuo database è dinamico, c'è sicuramente qualcosa di sbagliato. – jrockway
Sto esplorando la possibilità di utilizzare il mio schema/dizionario dati sovrapposto al database reale. Ho una tabella 'colonne' e una tabella 'tabelle'. Questi sono usati per mappare i nomi delle tabelle e delle colonne selezionati dall'utente e gli attributi su un tablespace generico sottostante. Pertanto, gli utenti possono scegliere di aggiungere relazioni tra tabelle in fase di esecuzione. Vorrei accedere a questa relazione tramite DBIx. Sto costruendo un'interfaccia intermedia per nascondere lo schema generico e ho bisogno di questa capacità. Grazie, -Joe – Joe