Resumen de tablas anidadas
Cómo incrustar las filas de una tabla hija dentro del formulario de edición de un registro padre con nested_table() - la API compartida de XcrudNested, y las cinco disposiciones en las que puede renderizarse una tabla anidada.
nested_table()
Llama a nested_table() sobre una instancia de Xcrud para incrustar las filas de una tabla hija dentro del formulario de edición del padre:
public function nested_table(
string $label,
string $parentField,
string $childTable,
string $childField,
?int $order = null
): XcrudNested
| Parámetro | Tipo | Por defecto | Descripción |
|---|---|---|---|
$label | string | obligatorio | Etiqueta mostrada para esta tabla anidada (nombre de pestaña, título de sección, etc., según la posición) |
$parentField | string | obligatorio | Columna de la tabla padre cuyo valor filtra las filas hijas |
$childTable | string | obligatorio | La tabla hija a incrustar (debe estar en la lista blanca) |
$childField | string | obligatorio | Columna de la tabla hija que se compara con el valor de $parentField |
$order | ?int | null | Posición entre las tablas anidadas hermanas/la propia pestaña de campos del padre; si se omite, se usa el orden de declaración |
Devuelve un nodo XcrudNested: una minicuadrícula CRUD (filas de $childTable WHERE $childField = el valor propio de $parentField de la fila padre) con sus propios Añadir/Editar/Eliminar. XcrudNested es un subconjunto deliberado de Xcrud: sin cuadro de búsqueda, sin panel de filtro avanzado, sin acciones masivas, sin sum(), sin group_by_columns() a nivel anidado. Lo que sí conserva es suficiente para volver a llamar a nested_table() sobre el nodo devuelto, anidando con la profundidad que se quiera: una tabla anidada puede a su vez tener más tablas anidadas, recibiendo cada nivel el mismo tratamiento.
$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();
La API de XcrudNested
Los métodos más usados sobre un nodo devuelto:
| Método | Descripción |
|---|---|
columns($fieldList) | Restringe/ordena qué columnas de la lista blanca de la tabla hija muestra la cuadrícula anidada |
fields($fieldList) | Restringe/ordena qué columnas editables muestra el propio formulario de Añadir/Editar de la cuadrícula anidada |
order_by($field, $dir = 'asc') | Orden de las filas de la cuadrícula anidada |
limit($n) | Tamaño de página de la cuadrícula anidada; 100 por defecto |
relation(...) | Desplegable de clave foránea para un campo anidado, con la misma forma que el relation() de nivel superior |
gallery($field, $childTable, $options) | Campo de múltiples imágenes en el propio formulario de Añadir/Editar de la cuadrícula anidada |
highlight() / highlight_row() | Estilo condicional de celda/fila, igual que los métodos de nivel superior |
intelligent_column_fit($enabled = true) | Anulación por nodo del comportamiento responsivo de ajuste de columnas |
default_tab($label, $order = null) | Nombra/ordena la pestaña que contiene los campos de fila PROPIOS de este nodo, una vez que este tiene sus propios hijos nested_table() |
position() - dónde se renderiza
position($position = 'bottom') es el control de disposición clave: decide dónde aparece una tabla anidada dentro del formulario de edición de su padre:
public function position(string $position = 'bottom'): self
| Valor | Descripción |
|---|---|
tab | Por defecto. Detrás de su propia pestaña, junto a la pestaña de los campos propios del padre |
bottom | Sección de ancho completo, siempre visible, añadida directamente debajo de los campos propios del padre |
bottom-fixed | Igual que bottom, pero fija/anclada cerca de la parte inferior del panel, con un asa de redimensionado arrastrable y su propio desplazamiento interno (~35% de altura por defecto) |
left / right | Una columna lateral fija y anclada, de ancho ajustable arrastrando, junto a los campos propios del padre |
Solo cambia dónde se renderiza un nodo; lo que hace una vez visible (columnas, campos, relaciones, anidamiento adicional) permanece idéntico sin importar la posición.