Blog
Crear tablas personalizadas en Magento 2
- enero 19, 2024
- Publicado por: admin
- Categoría: Magento 2
Crear tablas personalizadas en Magento 2 con los scripts de clases en PHP como lo fueron InstallSchema, resolvían una necesidad que nos parecía común, podíamos crear cualquier tabla personalizada en el proyecto e incluso contábamos con script que permitían irlos actualizando como lo era con el script UpgradeSchema, sin embargo, el equipo interno de Magento se dio cuenta por comentarios de la comunidad de algunas problemáticas que esto causaba, la forma de realizar estas implementaciones así que se decidieron encontrar alguna solución basada en archivos de configuración, recordemos que en Magento 2 los archivos de configuración son los representados por archivos de tipo XML.
db_schema.xml
Después de la llegada versión 2.4 de Magento se incorpora esta declarativa a través de un archivo de configuración XML, el poder crear de forma tan sencilla una tabla personalizadas al proyecto, db_schema.xml es un archivo que debe colocarse dentro de la carpeta de configuraciones de un módulo personalizado de Magento por ejemplo suponiendo que tenemos un espacio de nombres llamado Marcgento con un módulo personalizado llamado Miproyecto, se tendría que crear un archivo en la ruta app/code/Marcgento/Miproyecto/etc/db_schema.xml este archivo es el que se encargara de definir la estructura de una tabla de la base de datos.
En concreto, el archivo tendría un aspecto como el siguiente:
<schema>
<table>
<column></column>
<constraint></constraint>
</table>
</schema>
schema: Es el nodo que define la ruta del archivo de configuración de esquema schema.xsd
<schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Setup/Declaration/Schema/etc/schema.xsd">
table: Un archivo de configuración db_schema puede contener uno o más nodos de este tipo, e indicarán las tablas que se pueden crear en cada módulo personalizado, a este nodo se le pueden pasar los parámetros como el propio nombre personalizado de la tabla, el tipo de recurso, así como el motor de datos con el cual trabajar, y al final un comentario para describir a que se encargara esta tabla dentro del proyecto en Magento
<table name="nombre_tabla" resource="default" engine="innodb" comment="Comentario de la tabla">
column: Este nodo definirá cada columna de la tabla, dentro del nodo se le podrán pasar los parámetros para identificar que tipo de dato se almacenara, si es el valor primario, valor por defecto, así como muchas otras características que se definían en los archivos de script
<column xsi:type="int" name="entity_id" unsigned="true" nullable="false" identity="true" comment="ID"/>
contraint: Una de las formas potenciales de las bases de datos relacionales son los tipos constrain que permiten la funcionalidad jerarquía y relacional de integridad entre las diferentes tablas dentro de un modelo de datos bien estructurado, mediante este nodo se podrán definir todas aquellas características
<constraint xsi:type="foreign" referenceId="entityID_tabla_relacion" table="nombre_tabla" column="IdTabla" referenceTable="referenciaTabla" referenceColumn="referenciaIDTabla" onDelete="modoAccion"/>