/

Tables imbriquées : vue d'ensemble

Intégrer les lignes d'une table enfant dans le formulaire d'édition d'un enregistrement parent avec nested_table() - l'API commune XcrudNested, et les cinq dispositions dans lesquelles une table imbriquée peut s'afficher.

nested_table()

Appelez nested_table() sur une instance Xcrud pour intégrer les lignes d'une table enfant dans le formulaire d'édition du parent :

public function nested_table(
    string $label,
    string $parentField,
    string $childTable,
    string $childField,
    ?int $order = null
): XcrudNested
ParamètreTypePar défautDescription
$labelstringrequisLibellé affiché pour cette table imbriquée (nom d'onglet, titre de section, etc., selon la position)
$parentFieldstringrequisColonne de la table parente dont la valeur filtre les lignes enfants
$childTablestringrequisLa table enfant à intégrer (doit être autorisée par la liste blanche)
$childFieldstringrequisColonne de la table enfant comparée à la valeur de $parentField
$order?intnullPosition parmi les tables imbriquées sœurs/l'onglet des propres champs du parent ; si omis, on retombe sur l'ordre de déclaration

Elle retourne un nœud XcrudNested - une mini-grille CRUD (lignes de $childTable OÙ $childField = la valeur du propre $parentField de la ligne parente) avec son propre Ajouter/Éditer/Supprimer. XcrudNested est un sous-ensemble délibéré de Xcrud : pas de boîte de recherche, pas de panneau de filtre avancé, pas d'actions groupées, pas de sum(), pas de group_by_columns() au niveau imbriqué. Ce qu'il conserve suffit à appeler à nouveau nested_table() sur le nœud retourné, permettant une imbrication arbitrairement profonde - une table imbriquée peut elle-même avoir d'autres tables imbriquées, chaque niveau recevant le même traitement.

$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 XcrudNested

Les méthodes les plus couramment utilisées sur un nœud retourné :

MéthodeDescription
columns($fieldList)Restreint/ordonne les colonnes autorisées de la table enfant que la grille imbriquée affiche
fields($fieldList)Restreint/ordonne les colonnes éditables que le propre formulaire d'Ajout/Édition de la grille imbriquée affiche
order_by($field, $dir = 'asc')Ordre de tri des lignes de la grille imbriquée
limit($n)Taille de page pour la grille imbriquée ; 100 par défaut
relation(...)Liste déroulante de clé étrangère pour un champ imbriqué, même forme que le relation() de premier niveau
gallery($field, $childTable, $options)Champ multi-images sur le propre formulaire d'Ajout/Édition de la grille imbriquée
highlight() / highlight_row()Style conditionnel de cellule/ligne, identique aux méthodes de premier niveau
intelligent_column_fit($enabled = true)Surcharge par nœud du comportement responsive d'ajustement des colonnes
default_tab($label, $order = null)Nomme/ordonne l'onglet contenant les PROPRES champs de ligne de ce nœud, une fois qu'il a ses propres enfants nested_table()

position() - où elle s'affiche

position($position = 'bottom') est le contrôle de disposition clé - il décide où une table imbriquée apparaît dans le formulaire d'édition de son parent :

public function position(string $position = 'bottom'): self
ValeurDescription
tabPar défaut. Derrière son propre onglet, aux côtés de l'onglet des propres champs du parent
bottomSection pleine largeur toujours visible, ajoutée directement en dessous des propres champs du parent
bottom-fixedIdentique à bottom, mais collée/épinglée près du bas du panneau, avec une poignée de redimensionnement déplaçable et son propre défilement interne (~35% de hauteur par défaut)
left / rightUne colonne latérale collante de largeur fixe, aux côtés des propres champs du parent, avec une largeur déplaçable

Seul l'endroit où un nœud s'affiche change - ce qu'il fait une fois visible (colonnes, champs, relations, imbrication supplémentaire) reste identique quelle que soit la position.