Magento 2 getTable поведінка


13

TL; DR: Чи є в Magento 2 спосіб зробити метод getTableіз моделі збору ресурсів для повернення одного і того ж імені таблиці для двох різних параметрів?

Детальне пояснення
Почну з прикладу Magento 1.
Скажімо, у мене є таблиця з назвою module_entiti1_entity2.
Мені потрібно було оголосити цю таблицю в моїй config.xmlподібній

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

Тоді я можу отримати назву таблиці з моделі збору ресурсів, наприклад, наприклад:

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

Але якщо я хочу, я можу використовувати кілька псевдонімів для однієї таблиці.
Якщо мій config.xmlрозділ стане

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

Я можу отримати свою таблицю двома способами:

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

У Magento 2 більше немає декларації таблиці, як вище.
Я можу отримати так назву своєї таблиці $collection->getTable('module_entity1_entity2').
Чи є спосіб сказати magento, що для параметра module_entity2_entity1потрібно повернути те саме ім’я таблиці, що і для параметра module_entity1_entity2?

Відповіді:


3

Що ви шукаєте, так і є setMappedTableName. Зателефонуйте цьому всередині вашої моделі ресурсів:

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

Ви можете поставити це всередині функції, а потім викликати цю функцію, перш ніж викликати getTableметод.

В основному, це говорить, що коли я прошу module_entity1_entity1, дайте мені module_entity1_entity2стіл.


Дякую за пропозицію, я спробую це і повернусь з результатами. За вашими рекомендаціями, якщо я використовую setMappedTableNameконструктор моделі моєї ресурсу, він повинен працювати, правда? Цей виклик перед будь-яким іншим методом з класу.
Маріус

Правда, я вважаю, що це найкраще місце, де ви можете його розмістити, щоб воно було відображено на постійній основі. Якщо ви хочете, щоб він працював лише в конкретних випадках.
Вернард Луз

Гей. Це працює. Було б добре, якщо я можу це зробити через di.xml. Якщо це неможливо, я застосую власний механізм. Але це мені було потрібно для початку. Дякую.
Маріус

Запрошуємо вас, я фанат BTW. Мені приємно допомогти вам.
Вернард Луз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.