Comportement de getTable de Magento 2


13

TL; DR: Existe - t-il un moyen dans Magento 2 pour que la méthode à getTablepartir d'un modèle de collection de ressources renvoie le même nom de table pour 2 paramètres différents?

Explication détaillée
Je vais commencer par un exemple de Magento 1.
Disons que j'ai un tableau appelé module_entiti1_entity2.
Je devais déclarer cette table dans mon config.xmlcomme ça

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

Ensuite, je peux obtenir le nom de la table à partir d'un modèle de collecte de ressources, par exemple comme ceci:

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

Mais si je veux, je peux utiliser plusieurs alias pour la même table.
Si ma config.xmlsection devient

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

Je peux récupérer ma table de 2 manières:

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

Dans Magento 2, il n'y a plus de déclaration de table comme ci-dessus.
Je peux obtenir mon nom de table comme ceci $collection->getTable('module_entity1_entity2').
Existe-t-il un moyen de dire à magento que le paramètre module_entity2_entity1renvoie le même nom de table que le paramètre module_entity1_entity2?

Réponses:


3

Ce que vous cherchez, c'est setMappedTableName. Appelez cela dans votre modèle de ressource:

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

Vous pouvez mettre ceci dans une fonction puis l'appeler avant d'appeler la getTableméthode.

Fondamentalement, il dit que chaque fois que je demande module_entity1_entity1, donnez-moi la module_entity1_entity2table.


Merci pour la suggestion, je vais l'essayer et revenir avec les résultats. Selon vos recommandations, si j'utilise le constructeur setMappedTableNamede mon modèle de ressource, cela devrait fonctionner, non? Celui-ci est appelé avant toute autre méthode de la classe.
Marius

Certes, je pense que c'est le meilleur endroit où vous pouvez le mettre afin qu'il soit mappé en permanence. À moins que vous ne vouliez qu'il fonctionne dans des cas spécifiques uniquement.
Vernard Luz

Hey. Ça marche. Ce serait bien si je pouvais le faire via di.xml. Si ce n'est pas possible, je mettrai en place mon propre mécanisme. Mais c'est ce dont j'avais besoin pour commencer. Je vous remercie.
Marius

Je vous en prie, je suis fan de BTW. Il me fait plaisir de vous aider.
Vernard Luz
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.