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?

Marius
fuente

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.

Vernard Luz
fuente
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