Magento 2 getTable

13

TL; DR: Czy jest jakiś sposób w Magento 2, aby metoda getTablez modelu gromadzenia zasobów zwracała tę samą nazwę tabeli dla 2 różnych parametrów?

Szczegółowe wyjaśnienie
Zacznę od przykładu z Magento 1.
Załóżmy, że mam tabelę o nazwie module_entiti1_entity2.
Musiałem zadeklarować tę tabelę w config.xmlten sposób

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

Następnie mogę uzyskać nazwę tabeli z modelu kolekcji zasobów, na przykład w następujący sposób:

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

Ale jeśli chcę, mogę użyć wielu aliasów dla tej samej tabeli.
Jeśli moja config.xmlsekcja stanie się

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

Mogę odzyskać swój stół na 2 sposoby:

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

W Magento 2 nie ma już deklaracji tabeli jak wyżej.
Mogę uzyskać nazwę mojego stołu w ten sposób $collection->getTable('module_entity1_entity2').
Czy istnieje sposób, aby powiedzieć magento, że parametr module_entity2_entity1zwraca tę samą nazwę tabeli co parametr module_entity1_entity2?

Marius
źródło

Odpowiedzi:

3

To czego szukasz setMappedTableName. Nazwij to w swoim modelu zasobów:

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

Możesz umieścić to w funkcji, a następnie wywołać ją przed wywołaniem getTablemetody.

Zasadniczo mówi, że ilekroć o to poproszę module_entity1_entity1, daj mi module_entity1_entity2stół.

Vernard Luz
źródło
Dzięki za sugestię, spróbuję i wrócę z wynikami. Według twoich zaleceń, jeśli setMappedTableNameużyję konstruktora modelu zasobów, powinien on działać, prawda? Ten jest wywoływany przed jakąkolwiek inną metodą z klasy.
Marius
To prawda, że ​​to najlepsze miejsce, w którym można je umieścić, aby zostało zmapowane na stałe. Chyba że chcesz, aby działał tylko w określonych przypadkach.
Vernard Luz
Hej. To działa. Byłoby miło, gdybym mógł to zrobić za pośrednictwem di.xml. Jeśli nie jest to możliwe, wdrożę własny mechanizm. Ale tego potrzebowałem, aby zacząć. Dziękuję Ci.
Marius
Nie ma za co, jestem fanem BTW. Mam przyjemność ci pomóc.
Vernard Luz,