/

Panoramica delle Tabelle Annidate

Incorporare le righe di una tabella figlia nel modulo di modifica di un record genitore con nested_table() - l'API condivisa XcrudNested, e i cinque layout in cui una tabella annidata può essere renderizzata.

nested_table()

Richiama nested_table() su un'istanza Xcrud per incorporare le righe di una tabella figlia nel modulo di modifica del genitore:

public function nested_table(
    string $label,
    string $parentField,
    string $childTable,
    string $childField,
    ?int $order = null
): XcrudNested
ParametroTipoPredefinitoDescrizione
$labelstringobbligatorioEtichetta mostrata per questa tabella annidata (nome della scheda, intestazione della sezione, ecc., a seconda della posizione)
$parentFieldstringobbligatorioColonna della tabella genitore il cui valore filtra le righe figlie
$childTablestringobbligatorioLa tabella figlia da incorporare (deve essere in whitelist)
$childFieldstringobbligatorioColonna della tabella figlia confrontata con il valore di $parentField
$order?intnullPosizione tra le tabelle annidate sorelle/la scheda dei campi propri del genitore; se omesso segue l'ordine di dichiarazione

Restituisce un nodo XcrudNested - una mini griglia CRUD (righe di $childTable WHERE $childField = il valore di $parentField della riga genitore) con propri Aggiungi/Modifica/Elimina. XcrudNested è deliberatamente un sottoinsieme di Xcrud: nessuna casella di ricerca, nessun pannello di filtri avanzati, nessuna azione bulk, nessun sum(), nessun group_by_columns() a livello annidato. Ciò che mantiene è sufficiente per richiamare di nuovo nested_table() sul nodo restituito, annidando a profondità arbitraria - una tabella annidata può a sua volta avere ulteriori tabelle annidate, ognuna trattata allo stesso modo.

$xcrud = Xcrud::get_instance();
$xcrud->table('orders');
$xcrud->route('orders');

$orderdetails = $xcrud->nested_table('Order details', 'orderNumber', 'orderdetails', 'orderNumber');
$orderdetails->columns('productCode,quantityOrdered,priceEach');
$orderdetails->order_by('productCode', 'asc');

echo $xcrud->render();

L'API di XcrudNested

I metodi più comunemente usati su un nodo restituito:

MetodoDescrizione
columns($fieldList)Limita/ordina quali colonne in whitelist della tabella figlia mostra la griglia annidata
fields($fieldList)Limita/ordina quali colonne modificabili mostra il modulo Aggiungi/Modifica della griglia annidata
order_by($field, $dir = 'asc')Ordine di ordinamento per le righe della griglia annidata
limit($n)Dimensione della pagina per la griglia annidata; predefinito 100
relation(...)Dropdown per chiave esterna per un campo annidato, stessa forma del relation() di primo livello
gallery($field, $childTable, $options)Campo multi-immagine sul modulo Aggiungi/Modifica proprio della griglia annidata
highlight() / highlight_row()Stile condizionale di celle/righe, come i metodi di primo livello
intelligent_column_fit($enabled = true)Override per singolo nodo del comportamento responsive di adattamento colonne
default_tab($label, $order = null)Etichetta/ordina la scheda che contiene i campi di riga PROPRI di questo nodo, una volta che ha già proprie tabelle annidate figlie tramite nested_table()

position() - dove viene renderizzata

position($position = 'bottom') è il controllo di layout chiave - decide dove compare una tabella annidata nel modulo di modifica del genitore:

public function position(string $position = 'bottom'): self
ValoreDescrizione
tabPredefinito. Dietro una propria scheda, accanto alla scheda dei campi propri del genitore
bottomSezione sempre visibile e a larghezza piena, aggiunta subito sotto i campi propri del genitore
bottom-fixedCome bottom, ma fissata/ancorata vicino al fondo del pannello, con una maniglia di ridimensionamento trascinabile e uno scroll interno proprio (altezza predefinita di circa il 35%)
left / rightUna colonna laterale fissa e ancorata accanto ai campi propri del genitore, con larghezza trascinabile

Cambia solo dove viene renderizzato un nodo - cosa fa una volta visibile (colonne, campi, relazioni, ulteriore annidamento) resta identico a prescindere dalla posizione.