Post Top Ad

Your Ad Spot

miércoles, 26 de agosto de 2020

Base de datos Magento 2: modelos, modelos de recursos y colecciones

Descubra qué es ORM y descubra la conexión a una base de datos, así como la funcionalidad de cada componente ORM de Magento 2. Lleve la gestión de su tienda en línea al siguiente nivel con nuestro blog perspicaz.
¿Cómo funciona la conexión a la base de datos en Magento 2?
Modelos de recursos de Magento 2
Modelos Magento 2
Colecciones de Magento 2

¿Cómo funciona la conexión a la base de datos en Magento 2?

En Magento 2, la configuración de conexión de la base de datos está contenida en el archivo de la aplicación / etc / env.php :
La ruta a este archivo se almacena en la clase \ Magento \ Framework \ Config \ File \ ConfigFilePool en una matriz privada $ applicationConfigFiles .
Hay una cadena de conexión desde el modelo de recurso a la base de datos:
  • El método create () de la clase \ Magento \ Framework \ App \ Bootstrap se llama en el archivo index.php . Llama al método auto público estático createObjectManagerFactory () .
  • El método createObjectManagerFactory () llama al método self createConfigFilePool () que crea un objeto ConfigFilePool y devuelve el objeto ObjectManagerFactory donde ConfigFilePool se estableció como parámetro.
    ObjectManagerFactory es un objeto con operaciones complejas. La creación de una configuración global es una de esas operaciones).
  • Todos los modelos de recursos personalizados deben heredarse de la clase \ Magento \ Framework \ Model \ ResourceModel \ Db \ AbstractDb . Tiene el método getConnection () donde se llama al objeto \ Magento \ Framework \ App \ ResourceConnection .
El \ Magento \ Framework \ App \ ResourceConnection contiene campos y métodos para operar con los datos de configuración global. Se trata de los datos del archivo app / etc / env.php . Por ejemplo, ResourceConnection :: DEFAULT_CONNECTION es el valor predeterminado y corresponde a ['db' => ['connection' => ['default' => […]]]] :

(Puede crear una nueva conexión personalizada y establecerla en $ connectionName en su modelo de recurso personalizado).

Modelos de recursos de Magento 2

Como se mencionó anteriormente, la conexión a la base de datos se implementa a través del modelo de recursos. Los modelos de recursos son mapeadores de datos para la estructura de almacenamiento. Se utilizan para realizar transacciones en la base de datos.
Un modelo de recurso se extiende a \ Magento \ Framework \ Model \ ResourceModel \ Db \ AbstractDb (Con Magento 2, ya no tiene que declarar el modelo, el modelo de recurso, los adaptadores y más en la configuración. Por lo tanto, el proceso es mucho más simple de lo que solía estar en Magento 1).
Debe definir el nombre de la tabla y el nombre del campo de clave principal para el modelo de recurso porque es necesario saber dónde guardar el estado del modelo. Se especifican llamando al método _init () en el método protegido _construct () . Tenga en cuenta que llama a _init () desde un método de construcción de subrayado simple, no el constructor PHP real de doble subrayado. Este método _construct () de subrayado único también es el legado de Magento 1 y es llamado por el método __construct () real heredado de la clase \ Magento \ Framework \ Model \ ResourceModel .

Todos los procesos que interactúan con la base de datos se almacenan en métodos de modelos de recursos. Acceden a las tablas de la base de datos utilizando los métodos \ Magento \ Framework \ DB \ Adapter \ Pdo \ Mysql . Extiende la clase Zend_Db_Adapter_Pdo_Mysql e implementa Magento \ Framework \ DB \ Adapter \ AdapterInterface . Aquí hay un mecanismo de conexión de estas clases a modelos de recursos:
  • El objeto \ Magento \ Framework \ DB \ Adapter \ Pdo \ Mysql se crea en la clase Magento \ Framework \ Model \ ResourceModel \ Type \ Db \ Pdo \ Mysql en el método protegido getDbConnectionClassName () :

    Se llama en el método protegido getDbConnectionInstance () que se llama en el método público getConnection () .
  • La aplicación de archivo de configuración global / etc / di.xml contiene una preferencia:

    Entonces, \ Magento \ Framework \ Model \ ResourceModel \ Type \ Db \ Pdo \ Mysql es una realización de ConnectionAdapterInterface .
  • Se llama a ConnectionAdapterInterface en \ Magento \ Framework \ Model \ ResourceModel \ Type \ Db \ ConnectionFactory en el método create () :
  • El \ Magento \ Framework \ Model \ ResourceModel \ Type \ DB \ ConnectionFactory es una realización de la \ Magento \ Framework \ Model \ ResourceModel \ Type \ DB \ ConnectionFactoryInterface clase. Se llama en \ Magento \ Framework \ App \ ResourceConnection (que se llama en el modelo de recursos como se mencionó anteriormente y se usa en los métodos para conectarse a la base de datos) en el método __construct () :
Todas las transacciones, operaciones con claves externas, índices, columnas, tablas se implementan en \ Magento \ Framework \ DB \ Adapter \ Pdo \ Mysql .

Modelos Magento 2

Los modelos son datos y comportamiento, que representan entidades. Todo lo representado por una tabla de base de datos probablemente será un modelo.
Para crear el modelo, simplemente cree una clase y extiéndala desde \ Magento \ Framework \ Model \ AbstractModel . Nuevamente, tenga en cuenta el método de construcción de subrayado único. No lo confunda con el constructor PHP real. Llame al método _init () donde se debe establecer el modelo de recurso.

Esto es necesario para admitir los métodos heredados de AbstractModel getResource () y getCollection () .
El método getCollection () está obsoleto. No se utilizará en futuras versiones de Magento 2. En su lugar, se requiere usar la fábrica de colecciones para evitar conflictos con su código.
El modelo no tiene acceso directo a la base de datos, solo los modelos de recursos.
Los modelos contienen métodos solo para administrar objetos con datos que se supone deben estar preparados para guardar en una base de datos o cargar en una interfaz. Incluso la carga del método se "movió" a un modelo de recurso y quedará obsoleto de un modelo en futuras versiones de Magento 2. También contiene diferentes indicadores útiles que se utilizan para validar los datos antes de configurarlos en la base de datos o evitar transacciones innecesarias en la base de datos si se los datos de un objeto no se modificaron. Se usa en el método save () en la clase \ Magento \ Eav \ Model \ Entity dependiendo de las diferentes entidades de Magento 2

Excepto el método load () , el modelo de Magento2 también contiene los métodos obsoletos CRUD ("CRUD" significa "Crear, Leer, Actualizar, Eliminar"), guardar () y eliminar () . Las acciones se han delegado al modelo de recurso. Los desarrolladores que se esfuerzan por escribir un código seguro de actualización no deben utilizar los métodos CRUD en el modelo, ya que se eliminarán en algún momento en el futuro. En cambio, los modelos deben pasarse directamente a los métodos CRUD en el modelo de recurso.

En realidad, el método hace ambas cosas: si se especifica el parámetro $ isDeleted , establece el valor de la marca _isDeleted ; de lo contrario, devuelve el valor de la bandera actual. El método validateBeforeSave () usa un validador, que contiene todas las reglas para validar el modelo actual. Es llamado por el método save () del modelo de recurso .
En el método save () del modelo de recurso , la marca _dataSaveAllowed puede dejar de guardar después de que se llamó al método beforeSave () . Esto puede resultar útil en caso de que falle la validación de algunos datos. El método de modelos de recursos save () verifica el objeto guardado y ejecuta updateObject () y saveNewObject () , que de ellos usa el objeto \ Magento \ Framework \ DB \ Adapter \ AdapterInterface para trabajar con bases de datos. El mecanismo del método load () es similar:

Dado que el método de carga del modelo se eliminará en algún momento en el futuro, es mejor utilizar complementos en el método de carga del modelo de recurso en lugar de depender de estos eventos.
El método _afterLoad () se utiliza para procesar un objeto directamente después de cargar los datos. Cada vez que se carga un modelo de Magento, puede interceptarlo observando los eventos model_load_before y model_load_after , que lleva un objeto de transferencia de datos simple. La instancia del modelo en sí es el "objeto" clave .
servicios de desarrollo magento

Servicios de desarrollo de Magento

Lleve su tienda en línea al siguiente nivel con el desarrollo BelVG Magento
HAGA CLIC PARA VISITAR LA PÁGINA

Colecciones de Magento 2

Las colecciones encapsulan conjuntos de modelos y funciones relacionadas, como filtrado, clasificación y paginación.
Una colección en Magento es una clase que implementa las interfaces IteratorAggregate y Countable PHP5 SPL. Las colecciones se utilizan ampliamente en Magento para almacenar un conjunto de objetos de un tipo específico.
Base de datos en Magento2.  Parte 1. Modela colecciones y modelos de recursos.1bases de datos en configuración magento2

La colección se extiende a \ Magento \ Framework \ Model \ ResourceModel \ Db \ Collection \ AbstractCollection .
Al crear una colección de recursos, debe especificar a qué modelo corresponde, para que pueda instanciar las clases adecuadas después de cargar una lista de registros. También es necesario conocer el modelo de recurso coincidente para poder acceder a la base de datos. Es por eso que los nombres de clase del modelo y el modelo de recurso se especifican usando el método _init () en el método protegido _construct () .
Base de datos en Magento2.  Parte 1. Modela modelos de recursos y colecciones.2bases-de-magento-como-configurar

No existe la mejor opción para usar el método getCollection () de \ Magento \ Framework \ Model \ AbstractModel para obtener colecciones de entidades, ya que se eliminará en las versiones futuras de Magento 2. Debería utilizar la colección de fábrica. Aquí hay un ejemplo de cómo obtener una colección de productos en \ Magento \ Setup \ Fixtures \ Quote \ QuoteGenerator :

\ Magento \ Framework \ Model \ ResourceModel \ Db \ Collection \ AbstractCollection implementa la API con la que programa para las colecciones .
\ Magento \ Framework \ Model \ ResourceModel \ Db \ Collection \ AbstractCollection implementa la API programática para colecciones .

Las colecciones proporcionan varias funciones útiles para definir y trabajar con un conjunto de resultados. Como puede ver, el conjunto de métodos expuestos por colecciones no ha cambiado mucho desde Magento 1.
Base de datos en Magento2.  Parte 1. Modelos de colecciones y modelos de recursos.3 e1499337132442modelos, modelos de recursos y colecciones en magento 2

Es necesaria una colección de recursos para crear un conjunto de instancias de modelo y operar en ellas. Las colecciones de recursos cargan lentamente el juego de registros que representan. La primera vez que se accede a la lista de elementos, una colección se cargará automáticamente. Después de eso, una colección no se cargará nuevamente, incluso si se llama explícitamente al método load () .
Las colecciones están muy cerca de la capa de la base de datos. Su tarea es recuperar un conjunto de filas de la base de datos, luego iterar sobre ellas y, para cada fila, instanciar la clase de modelo coincidente.
Resuelve estos problemas principales:
  • Proporciona un contenedor para almacenar colecciones de objetos.
  • Evita la carga de datos innecesaria.
  • Almacena todos los objetos durante una sesión.
  • Proporciona una interfaz para filtrar y clasificar entidades de un tipo específico.
El ORM de Magento es utilizado por las implementaciones del repositorio que forman parte de los contratos de servicio de Magento 2. Esta es una variación importante de Magento 1, ya que un módulo ya no debería depender de otros módulos que usen un ORM específico, y en lugar de usar solo los repositorios de entidades. Los contratos de servicios se tratarán con más detalle en la segunda parte del artículo.
Consulte la segunda parte del artículo:  Base de datos en Magento 2: Contratos de servicio
¿Busca un equipo de desarrollo experto en Magento para realizar sus proyectos? ¡Podemos ayudar!
Las siguientes personas contribuyeron al artículo: Sasha Mitskevich.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

outbrain

Páginas