/

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ámetroTipoPor defectoDescripción
$labelstringobligatorioEtiqueta mostrada para esta tabla anidada (nombre de pestaña, título de sección, etc., según la posición)
$parentFieldstringobligatorioColumna de la tabla padre cuyo valor filtra las filas hijas
$childTablestringobligatorioLa tabla hija a incrustar (debe estar en la lista blanca)
$childFieldstringobligatorioColumna de la tabla hija que se compara con el valor de $parentField
$order?intnullPosició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étodoDescripció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
ValorDescripción
tabPor defecto. Detrás de su propia pestaña, junto a la pestaña de los campos propios del padre
bottomSección de ancho completo, siempre visible, añadida directamente debajo de los campos propios del padre
bottom-fixedIgual 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 / rightUna 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.