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?

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ół.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.