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.