Magento 2 getTable Verhalten

13

TL; DR: Gibt es in Magento 2 getTableeine Möglichkeit , die Methode aus einem Ressourcensammlungsmodell zu erstellen, um denselben Tabellennamen für zwei verschiedene Parameter zurückzugeben?

Detaillierte Erklärung
Ich beginne mit einem Beispiel aus Magento 1.
Nehmen wir an, ich habe eine Tabelle mit dem Namen module_entiti1_entity2.
Ich musste diese Tabelle in meinem config.xmlso deklarieren

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

Dann kann ich den Tabellennamen aus einem Ressourcensammlungsmodell wie folgt abrufen:

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

Aber wenn ich möchte, kann ich mehrere Aliase für dieselbe Tabelle verwenden.
Wenn mein config.xmlAbschnitt wird

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

Ich kann meine Tabelle auf zwei Arten abrufen:

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

In Magento 2 gibt es keine Tabellendeklaration mehr wie oben.
Ich kann meinen Tischnamen so bekommen $collection->getTable('module_entity1_entity2').
Gibt es eine Möglichkeit, Magento mitzuteilen, dass für den Parameter module_entity2_entity1derselbe Tabellenname wie für den Parameter zurückgegeben werden soll module_entity1_entity2?

Marius
quelle

Antworten:

3

Was Sie suchen, ist setMappedTableName. Nennen Sie dies in Ihrem Ressourcenmodell:

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

Sie können dies in eine Funktion einfügen und diese dann aufrufen, bevor Sie die getTableMethode aufrufen .

Grundsätzlich heißt es, wenn ich danach frage module_entity1_entity1, gib mir den module_entity1_entity2Tisch.

Vernard Luz
quelle
Vielen Dank für den Vorschlag, ich werde es versuchen und mit den Ergebnissen zurückkommen. Nach Ihren Empfehlungen setMappedTableNamesollte es funktionieren, wenn ich den in meinem Ressourcenmodell verwendeten Konstruktor verwende, oder? Dieser wird vor jeder anderen Methode aus der Klasse aufgerufen.
Marius
Es stimmt, ich denke, das ist der beste Ort, an dem Sie es platzieren können, damit es dauerhaft zugeordnet wird. Es sei denn, Sie möchten, dass es nur in bestimmten Fällen funktioniert.
Vernard Luz
Hallo. Es klappt. Es wäre schön, wenn ich das über machen könnte di.xml. Wenn es nicht möglich ist, werde ich meinen eigenen Mechanismus implementieren. Aber das ist es, was ich brauchte, um anzufangen. Vielen Dank.
Marius
Gern geschehen, ich bin übrigens ein Fan. Es ist mir eine Freude, Ihnen zu helfen.
Vernard Luz