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.