El editor de DataTables (VI). Tablas con relaciones m-n (editar)

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Cuando trabajamos con bases de datos con relaciones m-n entre tablas, la edición de registros, así como, en general, cualquier proceso que se haga sobre los mismos, debe llevarse a cabo teniendo en cuenta el modelado de datos. Una relación m-n implica el uso de una tabla intermedia donde se almacenan las relaciones. En el anterior artículo aprendimos sobre este tipo de escenarios, viendo como recuperar los datos y renderizarlos en la página.

En este artículo vamos a completar el proceso, viendo cómo usar el editor de DataTables de un modo que podamos gestionar este modelado de datos lo más eficientemente posible.

EL SCRIPT PRIMARIO

Este script es el primero en el que vamos a conocer algunas novedades. Realmente, la diferencia entre el script primario de este artículo y el del anterior es que, en este, hemos incorporado el editor, que ya conocemos. Sin embargo, esta vez el editor nos va a enseñar algunos conceptos o detalles, nuevos, que nos resultarán muy útiles. El script se llama articulo_editor_05_2.php, y su listado es el siguiente:

Vamos a ver las novedades, aunque, salvo que fuera necesario, no insitiremos en temas que ya se hayan tratado en anteriores artículos. En primer lugar fíjate en el primer grupo de líneas seleccionadas, entre la 123 y la 130. En ellas ves cómo definimos un campo select de múltiples opciones. Por lo demás, las opciones del combo se cargan dinámicamente por ajax, como respuesta al evento preOpen, como ya hemos hecho en otro artículo anterior.

Ten en cuenta que cuando se crea un campo combo múltiple, el editor lo gestiona de una forma muy eficiente. Si estas familiarizado con lo que eran estos combos tradicionalmente en HTML, el value sólo contenía la última opción marcada, y había que recuperar todas las opciones marcadas con JS. El editor de DataTables hace esto de forma transparente, almacenando todos los valores de las opciones marcadas en una matriz directamente. Lo verás claro cuando hablemos del script que procesa el formulario.

En la línea 312 vemos una novedad. Hemos hecho que el usuario sólo pueda seleccionar un registro para editar o borrar. Con esta línea evitamos las ediciones y borrados múltiples, y reducimos los errores causados por el usuario.

En la línea 314 vemos como hacer que la columna de la izquierda no sirva para seleccionar o desseleccionar una fila. Como la columna de la izquierda ya se usa para desplegar los datos adicionales, no deberíamos permitir que, además, dispare el selector. De este modo lo evitamos.

EL SCRIPT DE RECUPERACIÓN DEL DATASET

Este no presenta ya nada nuevo. Es idéntico al que vimos en el artículo anterior, y funciona del mismo modo. Lo hemos llamado datos_externos_editor_05_2.php.

EL SCRIPT DE RECUPERACIÓN DE ESPECIALIDADES

Este script, que hemos llamado leer_especialidades_editor_05_2.php, es similar a los que usamos en un artículo anterior para obtener dinámicamente las opciones de dos combos, de cargos y ciudades. Por lo tanto, tampoco nos demoraremos en él.

EL SCRIPT DE RESPUESTA AL EDITOR

Este script si presenta algunos puntos interesantes que quiero comentar contigo. El listado es crud_editor_05_2.php:

Si llamamos al editor para modificar los datos de un registro, cuando pulsamos el botón de Actualizar, la matriz de datos del formulario que recibe este script, aparte de indicar la acción, tiene los datos en un formato similar al siguiente:

Como ves, el contenido del combo múltiple de especialidades ha llegado como una matriz (id_especialidades) que, a su vez, es un elemento pertenciente a la matriz general de datos. Teniendo esto en cuenta, mira los comentarios que detallan como se procesan los datos en caso de que sea un nuevo registro, una edición, o un borrado.

Cómo ves, para gestionar tablas con relaciones m-n debemos contar con combos múltiples, y el editor de DataTables, nos facilita mucho el uso de estos componentes. En este enlace tienes todos los scripts para que puedas copiarlos en tu localhost y comprobar su funcionamiento, mientras lees el código, que es la mejor forma de aprender. Aparte, por supuesto, de experimentar, cambiando aquí y allí el código, y viendo lo que pasa, y por qué pasa.

     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *