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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.