Comportamiento getTable de Magento 2


13

TL; DR: ¿Hay alguna forma en Magento 2 de hacer que el método a getTablepartir de un modelo de colección de recursos devuelva el mismo nombre de tabla para 2 parámetros diferentes?

Explicación detallada
Comenzaré con un ejemplo de Magento 1.
Digamos que tengo una tabla llamada module_entiti1_entity2.
Necesitaba declarar esta tabla en mi config.xmlcomo este

<module_resource>
    <class>....</class>
    <entities>
         <entity1_entity2>
             <table>module_entiti1_entity2</table>
         </entity1_entity2>
    </entities>
</module_resource>

Entonces puedo obtener el nombre de la tabla de un modelo de colección de recursos, por ejemplo, así:

$collection->getTable('module/entity1_entity2');

Pero si quiero puedo usar múltiples alias para la misma tabla.
Si mi config.xmlsección se convierte

<module_resource>
    <class>....</class>
    <entities>
         <entity1_entity2>
             <table>module_entiti1_entity2</table>
         </entity1_entity2>
         <entity2_entity1>
             <table>module_entiti1_entity2</table>
         </entity2_entity1>
    </entities>
</module_resource>

Puedo recuperar mi mesa de 2 maneras:

$collection->getTable('module/entity1_entity2');
$collection->getTable('module/entity2_entity1');

En Magento 2 no hay más declaración de tabla como la anterior.
Puedo obtener el nombre de mi mesa de esta manera $collection->getTable('module_entity1_entity2').
¿Hay alguna manera de decirle a magento que el parámetro module_entity2_entity1devuelva el mismo nombre de tabla que el parámetro module_entity1_entity2?

Respuestas:


3

Lo que estás buscando es setMappedTableName. Llame a esto dentro de su modelo de recurso:

$this->_resources->setMappedTableName('module_entity1_entity1', 'module_entity1_entity2');

Puede poner esto dentro de una función y luego llamarla antes de llamar al getTablemétodo.

Básicamente, dice que cada vez que pido module_entity1_entity1, dame la module_entity1_entity2mesa.


Gracias por la sugerencia, lo intentaré y volveré con los resultados. Según sus recomendaciones, si uso el setMappedTableNameconstructor de mi modelo de recursos, debería funcionar, ¿verdad? Ese se llama antes que cualquier otro método de la clase.
— Marius

Es cierto, creo que ese es el mejor lugar donde puedes colocarlo para que esté mapeado permanentemente. A menos que desee que funcione solo en casos específicos.
— Vernard Luz

Oye. Funciona. Sería bueno si puedo hacer esto a través de di.xml. Si no es posible, implementaré mi propio mecanismo. Pero esto es lo que necesitaba para comenzar. Gracias.
— Marius

De nada, soy fanático, por cierto. Es un placer ser de ayuda para usted.
— Vernard Luz
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.