Comportamento getTable do Magento 2

13

TL; DR: Existe alguma maneira no Magento 2 de fazer o método a getTablepartir de um modelo de coleção de recursos para retornar o mesmo nome de tabela para 2 parâmetros diferentes?

Explicação detalhada
Vou começar com um exemplo do Magento 1.
Digamos que tenho uma tabela chamada module_entiti1_entity2.
Eu precisava declarar esta tabela no meu config.xmlassim

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

Então eu posso obter o nome da tabela de um modelo de coleção de recursos, por exemplo, assim:

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

Mas se eu quiser, posso usar vários aliases para a mesma tabela.
Se minha config.xmlseção se tornar

<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>

Posso recuperar minha mesa de duas maneiras:

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

No Magento 2 não há mais declaração de tabela como acima.
Eu posso pegar o nome da minha tabela assim $collection->getTable('module_entity1_entity2').
Existe uma maneira de dizer ao magento que o parâmetro module_entity2_entity1retorne o mesmo nome de tabela que o parâmetro module_entity1_entity2?

Marius
fonte

Respostas:

3

O que você está procurando é setMappedTableName. Chame isso dentro do seu modelo de recursos:

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

Você pode colocar isso dentro de uma função e chamar isso antes de chamar o getTablemétodo

Basicamente, diz que sempre que eu pedir module_entity1_entity1, me dê a module_entity1_entity2mesa.

Vernard Luz
fonte
Obrigado pela sugestão, vou tentar e voltar com os resultados. Pelas suas recomendações, se eu usar o setMappedTableNameconstrutor no meu modelo de recursos, ele deve funcionar, certo? Esse é chamado antes de qualquer outro método da classe.
Marius
É verdade que acho que esse é o melhor lugar para você colocar o mapa permanentemente. A menos que você queira que ele funcione apenas em casos específicos.
Vernard Luz
Ei. Funciona. Seria bom se eu pudesse fazer isso via di.xml. Se não for possível, implementarei meu próprio mecanismo. Mas é isso que eu precisava para começar. Obrigado.
Marius
De nada, eu sou um fã BTW. É um prazer ajudar você.
Vernard Luz