Поведение getTable в Magento 2

13

TL; DR: есть ли способ в Magento 2 сделать метод getTableиз модели сбора ресурсов, чтобы он возвращал одно и то же имя таблицы для 2 разных параметров?

Подробное объяснение
Я начну с примера из 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. Я с удовольствием помогу тебе.
Вернард Луз